4

我正在浏览一些关于更改检测的文章,我试图使用changeDetectorRef.detach()and启用或禁用更改检测changeDetectorRef.reattach()

我还将组件连接到ngDoCheck()唯一发现ngDoCheck()即使在detach(). 我究竟做错了什么 ?有人可以解释为什么ngDocheck()叫?我什ChangeDetectionStartegy至也设置OnPush了。 这是我正在阅读以了解变更检测的文章

我还为此创建了一个示例:https ://stackblitz.com/edit/angular-4ytdbs

4

1 回答 1

0

那是因为detach()将组件从它自己的组件中分离出来ChangeDetector,使其不检查模板/输入/主机绑定。这与ngDoCheck正在做的事情不同。这用于实现一种自定义更改检测,用于您知道会发生的更改,但角度无法预测。在应用程序中的任何地方都调用它。

我想不让你的代码在你的内部运行的唯一方法ngDoCheck是在分离时设置一个标志:

ngDoCheck(): void {
  if (attached) {
    // ...
  }
}

但我敢肯定你也想出来了:)

@selemmn 提供的链接确实提供了很好的见解

于 2018-11-13T13:01:13.157 回答