(click)
変更検出をトリガーせずに、Angular 2のイベント コールバック関数内でいくつかのロジックを実行しようとすると、大きな問題が発生します。
変更検出をトリガーしたくない理由
コールバック関数は、上への単純なアニメーション スクロールを実行します。他のコンポーネントには影響を与えないため、すべてのコンポーネントで変更検出を起動する必要はありません。実際、起動させたくありません! 変更検出はすべてのコンポーネントで実行されるため、モバイルでのアニメーションのパフォーマンスは非常に低くなります。
私が試したこと
を使用してゾーン外でコードを実行できることを知っています
this._zone.runOutsideAngular(() => {
someFunction();
})
click
これは、ゾーンの外で実行したいコードが、keyup
、keydown
イベントなどによって呼び出されない場合にうまく機能します。
私のコンポーネントは次のように見えるので...
<button (click)="doThing()">Do that thing outside the zone!</button>
doThing() {
this._zone.runOutsideAngular(() => {
myFunction();
})
}
...myFunction
ゾーン外で実行されますが、click
イベントは変更検出をトリガーします。
OnPush
可能な限り多くのコンポーネントに変更検出戦略を既に実装しています。
ここで変更検出がトリガーされないことが重要ですが、それを防ぐ方法が見つかりません。
編集すべてのコンポーネントで変更検出が設定されて
いるこのplnkを参照してください。OnPush
subrow コンポーネント ボタンをクリックすると、subrow、row、および app コンポーネントで CD がトリガーされます。