我在尝试执行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