我使用markForCheck
来检测我的角度分量(具有changeDetection: ChangeDetectionStrategy.OnPush
(的变化,最初,我将markForCheck
放在函数的开头,它对我有效,然后我意识到在所有函数操作完成后放它会更有意义。
在这两种方法中,如果最初调用angular或在动作完成后调用angular,则angular检测变化。
那么,如果有人能证明使用markForCheck的正确方法是什么呢?
functionName() { // It works at both places
this.cd.markForCheck();
//
.... Some Code that needs markForCheck ....
//
this.cd.markForCheck();
}
您使用markForCheck()
告诉Angular"标记"在活动更改检测策略之外发生的更改。
当您使用默认的更改检测策略时,markForCheck()
是不必要的,我想这就是为什么最初在哪里调用markForCheck()
并不重要。
调用markForCheck()
的正确位置是在具有ChangeDetectionStrategy.OnPush
的组件内。之后,您所做的更改不会被OnPush更改检测检测到。
这里有一个更深入的解释,你可能会觉得有帮助,什么';markForCheck((和detectChanges((之间的区别是什么
编辑:我错误地说markForCheck((触发了更改检测,这是不正确的。感谢@Fatih Ersoy
u在更改某些数据和组件后需要使用this.cdr.markForCheck((属性更改检测:ChangeDetectionStrategy.OnPush
becouse在这种情况下组件将不会重新加载self-html模板如果某些子子子代组件具有"OnPush-parent";markForCheck(("也会重新绘制它们。如果在没有OnPush的子部件中改变的数据显示;markForCheck((">
在我的例子中,compA在html中有垫子表,所以在重新加载项目后,我调用markForCheck((来重新绘制垫子表