Почему {{}} не работает в атрибутах src? Зачем мне нужен ngSrc?
это работает:
<a href="{{myAwesomeLink}}">It's a link. A dynamic one, at that.</a>
но это не так:
<img src="{{URLtoMyPerfectImage}}">
нужно использовать ngSrc
вместо. Могу я узнать, почему это так? У меня была аналогичная проблема с получением " src "(или это был "href"? Не помню) работать в руле.js и отказался от него (давление для доставки).
Это распространенная проблема браузера или что-то подобное?
2 ответов
продление ответа выше меня, в то время как
<a href="{{myAwesomeLink}}">It's a link. A dynamic one, at that.</a>
работает, это не лучшая практика при динамическом создании ссылок с помощью Angular. Каждый раз, когда вы используете привязку данных в теге привязки, вы должны использовать директиву ng-href. Таким образом, код для тега привязки должен выглядеть так:
<a ng-href="{{myAwesomeLink}}">It's a link. A dynamic one, at that.</a>
прямо из документации Angular:
использование угловой разметки, как в атрибуте href, делает страницу открытой на неправильный URL-адрес, если пользователь нажимает эту ссылку прежде чем angular сможет заменить фактический URL-адрес, ссылка будет сломана и, скорее всего, вернет ошибку 404. Директива ngHref решает эту проблему.
это помогает нам понять ng-src: так с
<img src="{{imgPath}}">
браузер пытается загрузить изображение, но Angular еще не заменил заключенное в скобки выражение в src, поэтому изображение не загружается. Используя
<img ng-src="{{imgPath}}">
вы говорите браузеру ждать, чтобы загрузить изображение, пока заключенное в квадратные скобки выражение заполнено, что позволяет загрузить правильное изображение.
на документация упоминаю об этом
использование угловой разметки, такой как {{hash}} в атрибуте src, не работает справа: браузер будет извлекать из URL-адреса с буквальным текстом {{hash}} пока Angular не заменит выражение внутри {{hash}}. Этот директива ngSrc решает эту проблему.
Если вы тщательно подумаете, привязка данных javascript к вашему html происходит после загрузки html DOM, поэтому браузеры видят intial src как {{url}}
скорее, что допустимая строка url и не выполняется.