Почему ng-non-bindable необходим для элемента в угловых картах Google?
у меня есть вопрос о элемент Угловые Карты Google плагин. Пример исходного кода в документации для элемента Windows использует на <div>
внутри <ui-gmap-windows>
элемент. По-видимому, это необходимо для того, чтобы угловые привязки правильно отображались на странице. Это явно не указано в документации, поэтому мне интересно, почему именно этот атрибут необходим, тем более, что the официальная угловая документация по ng-non-bindable дает понять, что угловые литералы в аннотированных HTML-элементах не будут анализироваться Angular.
чтобы проиллюстрировать, это фрагмент кода в моем HTML partial (предположим, что модель атрибута в области для этого элемента windows имеет имя и поле описания):
<ui-gmap-markers models="markers" coords="'self'">
<ui-gmap-windows>
<div>{{name}}: {{description}}</div>
</ui-gmap-windows>
</ui-gmap-markers>
без ng-non-bindable
как атрибут к <div>
(или без div) значения модели не будут привязаны к этим Угловатые литералы. Только двоеточие будет отображаться в окне, как в ":". но, как только я вставляю атрибут:
<ui-gmap-markers models="markers" coords="'self'">
<ui-gmap-windows>
<div ng-non-bindable>{{name}}: {{description}}</div>
</ui-gmap-windows>
</ui-gmap-markers>
тогда текст окна будет отображаться правильно. Он скажет что-то вроде " местоположение 1: это место, где находится местоположение 1."
Итак, еще раз, мне интересно, почему ng-non-bindable точно требуется здесь. Это очень поможет мне лучше понять эту угловую библиотеку, и, возможно, угловую в целом, лучше.
1 ответов
в основном это сводится к ui-gmap, выполняющему ручную компиляцию шаблона.
В стандартного комплекта, если у вас есть что-то вроде:
<directive>
<some-html>{{someBinding}}</some-html>
<directive>
это обычно означает, что" директива "трансцендирует содержимое, и поэтому" someBinding "привязан к области, в которой" директива "создается, а не" директива " innerScope.
однако в случае ui-gmap:
<ui-gmap-windows>
<some-html>{{someBinding}}</some-html>
</ui-gmap-windows>
область должна быть для каждого созданного окна, а не область создания экземпляра ui-gmap-windows. Поэтому, если у вас нет ng-non-bindable, область будет для экземпляра ui-gmap-windows, и someBinding не будет существовать.
по существу ui-gmap использует трансклицированный элемент в качестве шаблона для применения к каждому экземпляру объекта окна, но если angular попадает туда и связывает этот элемент с неправильной областью, то ui-gmap не может повторно привязаться к правильной области.
надеюсь, что это проясняет для вас немного.
On отдельное замечание, вы действительно не должны использовать ui-gmap-windows, Если вам не нужно несколько окон, отображаемых одновременно. Используйте одно ui-gmap-окно и привяжите к активному маркеру.