Почему 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-окно и привяжите к активному маркеру.