私は Angular のプレゼンテーションの 1 つに参加しましたが、会議の参加者の 1 人が、バインディングng-bind
よりも優れていると述べました。{{}}
理由の 1 つは、ng-bind
変数をウォッチ リストに入れて、モデルの変更があった場合にのみデータがビューにプッシュされ、一方で、{{}}
毎回式を補間し (角度サイクルだと思います)、値が変更されたかどうかに関係なく値をプッシュすることです。
また、画面に表示されるデータがそれほど多くない場合は使用でき{{}}
、パフォーマンスの問題は目に見えないとも言われています。この問題について、どなたか説明していただけませんか?
ベストアンサー1
可視性:
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 サービスのドキュメント
2014 年 11 月 28 日更新(ただし、話題から外れるかもしれません):
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
行ごとに複数のバインディングを使用して、テーブルにいくつかのデータを出力します。変換バインディング、フィルター出力は、すべてのスコープ ダイジェストで実行されます。