Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 为什么markForCheck()只适用于一个分支?_Angular_Angular Di - Fatal编程技术网

Angular 为什么markForCheck()只适用于一个分支?

Angular 为什么markForCheck()只适用于一个分支?,angular,angular-di,Angular,Angular Di,很明显,我们需要使用markForCheck()主要是使用OnPush策略来标记组件以进行CD检查,但是 我想知道为什么只检查一个分支: 为什么可以为整个应用程序运行CD或只运行特定组件,没有?感谢@yurzui@Toxicable@Maximus的评论,我了解到: 为什么不在每个组件上? 这就是onPush策略优化的想法:仅在必要时运行它 为什么是整个分支,而不是一个组件? 因为这就是CD的制作方式——它总是从根组件开始往下走。因此,如果要在特定组件上运行CD,则需要创建从根目录到该特定组件

很明显,我们需要使用markForCheck()主要是使用OnPush策略来标记组件以进行CD检查,但是

我想知道为什么只检查一个分支:


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

感谢@yurzui@Toxicable@Maximus的评论,我了解到:

为什么不在每个组件上?

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

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


因为这就是CD的制作方式——它总是从根组件开始往下走。因此,如果要在特定组件上运行CD,则需要创建从根目录到该特定组件的所有路径

如果要提高性能,为什么要为其他分支运行更改检测循环?我们打开了检查组件的路径,其中发生了更改。该组件的更改检测器Ref标记为检查,因为每个组件的变化检测器Ref独立于others@Toxicable查看在
markForCheck
期间执行的
markParentViewsForCheck
功能,是否确定只标记该组件的cdRef进行检查?它将用
OnPush
stategy@Toxicable,它不是独立的,它将为组件的所有子组件运行CD
markForCheck
不运行更改检测,请参阅