1

markForCheck用来检测我的角度分量的变化(它有changeDetection: ChangeDetectionStrategy.OnPush),最初,我把它放在markForCheck函数的开头,它对我有用,然后我意识到在所有函数动作完成后把它放在更有意义.

在这两种方法中,角度都在检测变化,如果它最初被调用或在动作完成后被调用。

因此,如果有人可以证明使用 markForCheck 的正确方法是什么?

functionName() { // It works at both places
  this.cd.markForCheck();
  //
  .... Some Code that needs markForCheck ....
  //
  this.cd.markForCheck();
}
4

2 回答 2

0

markForCheck()用来告诉 Angular 来“标记”在主动变更检测策略之外发生的变更。

当您使用默认更改检测策略时,markForCheck()这不是必需的,我猜这就是为什么您最初markForCheck()拨打电话的位置并不重要。

调用的正确位置是在您进行 OnPush 更改检测不会获取的更改之后markForCheck()的组件内部。ChangeDetectionStrategy.OnPush

这是一个更深入的解释,您可能会觉得有帮助, markForCheck() 和 detectChanges() 之间有什么区别

编辑:我错误地说 markForCheck() 触发更改检测,这是不正确的。谢谢@Fatih Ersoy

于 2021-07-02T07:54:48.180 回答
0

您需要在更改某些数据并且组件具有属性 changeDetection: ChangeDetectionStrategy.OnPush 后使用 this.cdr.markForCheck()

因为在这种情况下,如果某些子组件具有 OnPush,则组件不会重新加载 self html 模板 - 父级“markForCheck()”也会重绘它们。如果在没有 OnPush 的情况下在子组件中显示更改的数据,则不能使用“markForCheck()”

在我的例子中,compA 在 html 中有 mat-table,所以在重新加载项目后我调用 markForCheck() 来重绘 mat-table

于 2021-07-02T07:44:43.983 回答