2016-07-07 15 views
2

私のリストにはたくさんのアイテムがあり、そのうちのいくつかは最終状態にあり、変更されずに一部が変更されるという状況に遭遇しました。私は考えていましたが、Angularの条件付きバインディング( '::')を使用する方法はありますか?私は最終的なフラグがtrueの場合と同様に、1回のバインディングを使用します。それ以外の場合は通常のバインドを使用します。1回限りのバインディングを条件付きで適用する

DOM構造全体をng-ifで複製し、1回限りのバインディングで、もう1つに通常のバインディングを持たせる必要がありますか?ディレクティブにif節を包む

<div>{{::myvar}}</div> 

<div>{{myvar}}</div> 

<div is-final='true' ng-model='myvar'></div> 

<div is-final='false' ng-model='myvar'></div> 

へ:

+0

条件付きの1回限りのバインディングは現在サポートされていないものです。何千もの項目について話している場合を除き、 'ng-if'と重複したコードで強制的に実行することによるパフォーマンス上のメリットを得ることは疑いありません。その点、最初にUIの多くの項目を持つのはなぜですか? – Claies

+0

@ Claies、私はチャットウィンドウを持っていますが、同時に数千ものメッセージがありませんが、これらのメッセージには送信者、テキスト、到着時刻などのデータ依存フィールドがかなりあります。最新の送信メッセージは、配信されたサーバーからの保留中の確認メッセージです。他のすべてのメッセージは静的に留まることができますが、このメッセージは賛同イベントで変更する必要があります。 – pokrishka

+0

@ Claiesさらに、このコンポーネントは妥当な量の腕時計を備えていますが、時計の数を最小限に抑えるようにしてください。他のページにはウォッチャーや他の課税コンポーネント。ただ倹約しようとする。 – pokrishka

答えて

1

最もモジュラー方法はからDOM要素を再コンパイルするカスタムディレクティブを宣言することです。この方法で、多くのLOCを複製する必要はありません。この指示文は、require ngModeltemplatereplace: trueおよびlinkにしか必要ありません。また、テンプレート$compileの使用を避けることもできます。linkです。

+0

はい、ありがとう、私はあなたのアプリの中で2回以上表示される状況になるなら、それはおそらく私はやって終わるつもりです。 – pokrishka

+0

良いアプローチです。最初の時間は単純なコーディングであり、2回目はリファクタリングが必要な場合があり、3番目の機能は機能です;) – morels

+0

私はこの解決策の中で私の頭を包み込む問題が少しあります。誰かがこの指令を含む短いスニペットを投稿できますか? – tivoni

関連する問題