我在嘗試執行Angular 2中的(click)
事件回調函數內的某些邏輯時遇到了重大故障,而未觸發更改檢測。Angular 2單擊事件回調而不觸發更改檢測
爲什麼我不想觸發變化檢測
回調函數執行簡單的動畫滾動到頂部。它不會影響其他組件,因此我不需要在每個組件中觸發更改檢測,事實上,我真的不希望它啓動!由於變化檢測在每個組件中都會觸發,因此移動設備上的動畫性能非常差。
我已經試過
我知道我可以使用區外運行的代碼
this._zone.runOutsideAngular(() => {
someFunction();
})
當代碼要運行的外部不調用區這很好地工作由click
,keyup
,事件等
因爲我的組件看起來像......
<button (click)="doThing()">Do that thing outside the zone!</button>
doThing() {
this._zone.runOutsideAngular(() => {
myFunction();
})
}
... myFunction
將區外運行,但click
事件將觸發變化檢測。
我已經在儘可能多的組件中實現了OnPush
更改檢測策略。
重要的是變化檢測不會觸發在這裏,但我找不到防止它的方法。
編輯 看到這個plnk與變化檢測中的所有組件設置爲OnPush
。點擊subrow組件按鈕將在子行,行和應用程序組件中觸發CD。
您是否嘗試在該組件的@Component({})'裝飾器中使用'changeDetection:ChangeDetectionStrategy.OnPush'? – micronyks