10

私のアプリでは、手動の変更検出を設定したいと考えています。このために、ChangeDetectionStrategry を OnPush に設定し、コンポーネントで変更が発生するたびに、detectChanges を使用して手動で変更検出を実行します。

私の理解によれば、親コンポーネントで ChangeDetectionStrategy を OnPush に設定すると、子で ChangeDetectionStrategy を OnPush に設定しなくても、親コンポーネントで 1 回だけ、子コンポーネントで 1 回だけ変更検出が実行されます。親コンポーネントに変更がある場合は、親コンポーネントで detectChanges() を実行します。子コンポーネントに変更があれば、子コンポーネントで detectChanges() を実行します。

それは正しい方法ですか?または何か良い方法はありますか?

次に、特定のコンポーネントで期待どおりに動作し、変更検出が実行されていないかどうかを確認する方法はありますか。

4

2 に答える 2

9

を使用すると、子コンポーネントのs 値が更新されたとき、子コンポーネントがリッスンしていたイベントが受信されたとき、またはイベントを発行したパイプの使用にバインドされたオブザーバブルがChangeDetectionStrategy.OnPush発生したときに、子コンポーネントで変更検出が実行されます。@Input()(someEvent)="..."@HostListener(...)| async

が変更されたときにコードを実行するに@Input()は、入力をセッターにするか、更新時OnChangesにコードを実行するように実装できます。

イベントの場合は、イベント ハンドラーでコードを呼び出すだけです。

.map(...)オブザーバブルの場合、値が発行されたときにコードが実行されるように、演算子を適用できます。

于 2016-09-25T17:11:08.893 に答える