O AngularJS tem um novo recurso desde a versão 1.3.0-beta.10: o "lazy one-time binding" .
Expressões simples podem ser prefixadas com ::
, dizendo ao angular para parar de observar depois que a expressão foi avaliada pela primeira vez. O exemplo comum dado é algo como:
<div>{{::user.name}}</div>
Existe uma sintaxe semelhante para expressões como as seguintes?
<div ng-if="user.isSomething && user.isSomethingElse"></div>
<div ng-class="{classNameFoo: user.isSomething}"></div>
javascript
angularjs
binding
lazy-evaluation
seldary
fonte
fonte
Respostas:
Sim. Você pode prefixar todas as expressões com
::
, mesmo aquelas emngIf
oungClass
:Na verdade, o código simplesmente verifica se os dois primeiros caracteres na expressão são
:
para ativar a ligação única (e depois os remove, portanto, os parênteses nem são necessários). Tudo o resto permanece o mesmo.fonte
<div ng-if="::user.isSomething"></div>
e<div ng-if="::(!user.isSomething)"></div>
ambos são renderizados. Funciona sem o "::".::
funcionam bem para mim, conforme explicado na minha edição. Você pode fazer um violino, em caso de dúvida?::
. Ele funciona bem para ng-class, mas ng-if não parece obedecer à vinculação única para mim (1.5.6). Observe que estou tentando vincular unilateralmente uma propriedade de objeto que veio de uma repetição de ng. Não tenho certeza se isso faz diferença.