2017-07-30 99 views
2

很明显,我们需要使用markForCheck()大多与OnPush策略,以标志分量做CD检查,但为什么markForCheck()仅适用于一个分支?

我试图找出为什么只检查一个分支:

enter image description here

为什么可以运行整个应用程序的CD或只有特定组件,否?

+0

如果我们试图提高性能,为什么要为其他分支运行更改检测周期?我们打开检查发生更改的组件的路径 – yurzui

+0

由于每个组件的变更检测器Ref独立于其他组件,因此只有该组件的变更检测器Ref被标记为检查 – Toxicable

+1

@Toxicable查看'markForCheck'期间执行的'markParentViewsForCheck'函数https://github.com/angular/angular/blob/4.3.x/packages/core/src/view/util.ts#L110-L118您确定只有该组件的cdRef会被标记为检查吗?它会标记检查当前组件视图及其所有父母的'OnPush' stategy – yurzui

回答

0

得益于@yurzui @Toxicable @Maximus评论我来的理解是:

为什么不能每个组件?

这是关于onPush策略优化的想法:仅在必要时运行它。

为什么整个分支,但不只是一个组件?

因为它是如何制作CD的 - 它总是从根部向下。所以如果你想在特定的组件上运行CD,你需要创建从根到这个特定组件的所有路径

相关问题