在Angular SPA中更改检测

时间:2018-03-19 15:31:01

标签: angular single-page-application

考虑以下非常简单的Angular SPA,其中包含以下组件的树结构:

        A
       / \
      B   C

B,C 是我们SPA的两页。由于 B C (他们的模板)永远无法同时显示,因此我的理解是 C 中的there is no reason to trigger change detection模型在 B 中变化,反之亦然。为了更清楚,例如即使 B 中的更改影响 C ,也不会有任何问题,因为当显示C时,将构建一个全新的DOM will be aware of先前的变化并反映出来。

I'd appreciate your thoughts on the above。而且,这是排除例如当更改适用于 B 时,来自更改检测的 C

1 个答案:

答案 0 :(得分:2)

如果您使用路由显示B或C,并且在任何时候只激活了一个或另一个,那么另一个在DOM中不存在,因此不会得到任何更改。

您可以在console.log()ngOnInit方法中添加ngOnDestroy语句来尝试此操作。当您导航到B时,您将获得ngOnInit。当您导航到C时,您将获得B的ngOnDestroy,然后获得C的ngOnInit

因此,您的问题的答案是,在加载B时,您不必做任何事情来阻止C进行变更检测。

当然,除非您的布局与我根据您的问题假设的不同。

以下是我的一个示例应用程序的图片,其中Augury显示了组件树。请注意,未列出MovieEditComponent。

enter image description here

这是我选择编辑选项后的另一个屏幕截图。现在列出了MovieEditComponent而不是MovieDetailComponent。

enter image description here