Начиная с версии 1.3.0-beta.10, в AngularJS появилась новая функция: «ленивая одноразовая привязка» .
Простые выражения могут иметь префикс ::
, указывающий angular прекратить наблюдение после того, как выражение было впервые вычислено. Приведенный общий пример выглядит примерно так:
<div>{{::user.name}}</div>
Есть ли аналогичный синтаксис для выражений, подобных следующим?
<div ng-if="user.isSomething && user.isSomethingElse"></div>
<div ng-class="{classNameFoo: user.isSomething}"></div>
javascript
angularjs
binding
lazy-evaluation
сельдарный
источник
источник
Ответы:
Да. Вы можете добавлять к каждому выражению префикс
::
, даже если он находится вngIf
илиngClass
:<div ng-if="::(user.isSomething && user.isSomethingElse)"></div> <div ng-class="::{classNameFoo: user.isSomething}"></div>
Фактически, код просто проверяет, нужны ли два первых символа в выражении,
:
чтобы активировать одноразовую привязку (а затем удаляет их, поэтому скобки даже не нужны). Все остальное остается прежним.источник
<div ng-if="::user.isSomething"></div>
и<div ng-if="::(!user.isSomething)"></div>
обе визуализируются. Работает без "::".::
работают для меня, как описано в моем редактировании. Можете ли вы сделать скрипку, если сомневаетесь?::
. Он хорошо работает для ng-class, но ng-if, похоже, не подчиняется одноразовой привязке для меня (1.5.6). Обратите внимание, что я пытаюсь односторонне привязать свойство объекта, полученное из ng-repeat. Не уверен, что это имеет значение.