我正在阅读有关变更检测的一些文章,并且尝试使用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
答案 0 :(得分:0)
这是因为detach()
将组件与其自身的ChangeDetector
分离,从而使其无法检查模板/输入/主机绑定。这与ngDoCheck
所做的事情不同。这用于实现某种自定义更改检测,用于您将要发生但角度无法预期的更改。在应用程序中的任何地方都可以调用它。
我想不让代码在ngDoCheck
中运行的唯一方法是在分离时设置一个标志:
ngDoCheck(): void {
if (attached) {
// ...
}
}
但我敢肯定,您也已经弄清楚了这一点:)
@selemmn提供的link确实提供了很好的见识