当我从ChangeDetectorRef调用detach()时,为什么会调用ngDoCheck()?

时间:2018-11-13 12:34:58

标签: angular observable angular-changedetection

我正在阅读有关变更检测的一些文章,并且尝试使用changeDetectorRef.detach()changeDetectorRef.reattach()启用或禁用变更检测。

我还将该组件挂接到ngDoCheck()上,只是发现ngDoCheck()之后也正在调用detach()。 我究竟做错了什么 ?有人可以解释为什么叫ngDocheck()吗? 我甚至也将ChangeDetectionStartegy设置为OnPush。  This is the article i was going through to understand change detection

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

1 个答案:

答案 0 :(得分:0)

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

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

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

但我敢肯定,您也已经弄清楚了这一点:)

@selemmn提供的link确实提供了很好的见识