No AngularJS, como posso renderizar um valor sem vinculação de dados bidirecional? Pode-se desejar fazer isso por motivos de desempenho ou até mesmo renderizando um valor em um determinado momento.
Os exemplos a seguir usam vinculação de dados:
<div>{{value}}</div>
<div data-ng-bind="value"></div>
Como faço para renderizar value
sem qualquer vinculação de dados?
javascript
angularjs
data-binding
Blowsie
fonte
fonte
ng-model
fornece ligação de dados bidirecional: alterações de modelo -> atualizações de visualização, alterações de visualização -> atualizações de modelo.Respostas:
Angular 1.3+
No 1.3, o Angular oferece suporte para isso usando a seguinte sintaxe.
Conforme mencionado nesta resposta .
Angular 1.2 e abaixo
Isso é simples e não precisa de um plugin. Veja isso.
Esta pequena diretriz realizará facilmente o que você está tentando alcançar
Você pode ligar uma vez assim
Você pode ligar normalmente
Demo: http://jsfiddle.net/fffnb/
Alguns de vocês podem estar usando o batarang angular e, conforme mencionado nos comentários, se você usar esta diretiva, o elemento ainda mostra como vinculativo quando não é, tenho certeza que isso tem algo a ver com as classes que estão anexadas ao elemento. tente fazer isso, deve funcionar (não testado) . Deixe-me saber nos comentários se funcionou para você.
@ x0b : Se você tem TOC e deseja remover o
class
atributo vazio, faça issofonte
Parece que o Angular 1.3 (começando com beta 10) tem uma vinculação única integrada:
https://docs.angularjs.org/guide/expression#one-time-binding
fonte
Use o módulo bindonce . Você precisará incluir o arquivo JS e adicioná-lo como uma dependência ao módulo do aplicativo:
Esta biblioteca permite renderizar itens que são vinculados apenas uma vez - quando são inicializados pela primeira vez. Quaisquer outras atualizações desses valores serão ignoradas. É uma ótima maneira de reduzir o número de relógios na página para coisas que não mudarão depois de serem renderizadas.
Exemplo de uso:
Quando usado dessa forma, a propriedade em
value
será definida assim que estiver disponível, mas o relógio será desabilitado.fonte
$resource
.Comparação entre as respostas @OverZealous e @Connor:
Com o ngRepeat tradicional de angular: 15s para 2.000 linhas e 420mo de RAM ( Plunker )
Com ngRepeat e o módulo de @OverZealous: 7s para 2.000 linhas e 240mo de RAM ( Plunker )
Com ngRepeat e a diretiva de @Connor: 8s para 2.000 linhas e 500mo de RAM ( Plunker )
Fiz meus testes com o Google Chrome 32.
fonte
angular-once
comparado. Obrigado.angular-once
pacote (eu postei como uma opção alternativa aqui).Como alternativa, existe o
angular-once
pacote:angular-once
foi realmente inspiradobindonce
e forneceonce-*
atributos semelhantes :fonte