可視性:
angularjsがブートストラップしている間、ユーザーはhtmlに配置されたブラケットを見るかもしれません。これはで処理できますng-cloak
。しかし、私にとってこれは回避策であり、を使用する場合、使用する必要はありませんng-bind
。
パフォーマンス:
{{}}
あるはるかに遅いです。
これng-bind
はディレクティブであり、渡された変数にウォッチャーを配置します。そのためng-bind
、渡された値が実際に変更された場合にのみ適用されます。
一方、ブラケットは、必要のない場合でも、ダーティチェックされ、毎回 更新されます。$digest
私は現在、大きな単一ページアプリ(ビューあたり500バインディング)を構築しています。{{}}からstrictに変更するとng-bind
、すべてので約20%節約できましたscope.$digest
。
提案:
angular-translateなどの変換モジュールを使用する場合は、ブラケットアノテーションの前に常にディレクティブを使用してください。
{{'WELCOME'|translate}}
=> <span ng-translate="WELCOME"></span>
フィルター関数が必要な場合は、実際にはカスタムフィルターを使用するだけのディレクティブをお勧めします。 $ filterサービスのドキュメント
更新28.11.2014(ただし、トピックから外れている可能性があります):
Angular 1.3xでは、このbindonce
機能が導入されました。したがって、式/属性の値を1回バインドできます(!= 'undefined'の場合にバインドされます)。
これは、バインディングの変更を予期しない場合に役立ちます。
使用法:::
バインディングの前に配置します。
<ul>
<li ng-repeat="item in ::items">{{item}}</li>
</ul>
<a-directive name="::item">
<span data-ng-bind="::value"></span>
例:
ng-repeat
行ごとに複数のバインディングを持つテーブル内のデータを出力します。翻訳バインディング、フィルター出力、すべてのスコープダイジェストで実行されます。
ngBind
代わりに使用することをお{{ expression }}
勧めします。ngBind
はelement属性なので、ページのロード中はユーザーにバインディングを非表示にします。」-しかし、パフォーマンスについては何も言及されていません。