2016-04-12 15 views
1

私は変更検出に関する多くの記事を読んでいますが、どのように動作し、表示するのかをはっきりとわかりません。反応の場合と同様に、domのパッチを作成することによって変更されたUIの一部だけをレンダリングするバーチャルドームと差分アルゴリズムも同様に、UIのどの部分を変更する必要があるかを角がどのように知っているかを示します。変更判定後、angular2はどのように表示されますか?

どのような変更がレンダリング/置換されるかは、どのように判断するのですか?

答えて

3

各コンポーネントには、Angularが実行時に作成する関連するチェンジ検出器オブジェクトがあります。変更検出オブジェクトは、すべてのテンプレートバインディングを追跡します。変更検出が実行されると、デフォルトで、各変更検出器オブジェクト–の各テンプレートバインディングがダーティーにチェックされます。つまり、以前の値と現在の値が比較されます。変更が検出されると、新しい値がDOMに伝播されます。したがって、変更が1つしかない場合は、DOMの一部のみが更新されます。変更が見つかった場合は、ビュー全体が再レンダリングされません。変更された部分のみが影響を受けます。

私の長い答え:https://stackoverflow.com/a/34570122/215945

+0

私はそれが唯一の細胞の一部または全部グリッドを再レンダリングんセルの値を更新したと、編集可能なセル(セル自体の成分である)とのグリッドを持っている場合は? 実際には、セル値の更新によってグリッド状態も変更されます。 – Akhlesh

+1

@Akhlesh、それはすべてのビューにバインディングが何であるかになります。 1つのセルコンポーネントのバインディングのみが変更された場合(1つのセル値のみが変更されたため)、そのセルのDOMのみが新しい値で更新されます。グリッドがビュー内でそのセルの値を何らかの形で使用すると、グリッドに関連付けられたDOMも更新されます。しかし、あなたの場合、1つのセルのDOMだけが更新されるように思えます。全体のグリッド状態が変化するだけで(セルが変更されたため)、Angularがグリッド全体を再レンダリングするわけではありません。それはその点で他の枠組みのようなものではありません。より効率的です。 –

+0

@Akhleshあなたのセルコンポーネントがリーフコンポーネントである場合(それらが独自の子コンポーネントを持たないことを意味します)、それらは値の入力プリミティブプロパティ(つまり文字列または数値)にのみ依存します。 OnPush' [検出方法の変更](https://angular.io/docs/ts/latest/api/core/ChangeDetectorRef-class.html)を使用して、セルのチェックをより効率的に行うことができます。 –

関連する問題