繁体   English   中英

Angular ngOnChanges 和变更检测策略似乎是矛盾的?

[英]Angular ngOnChanges and the change detection strategies appear to be contradictory?

NgChanges on 在输入绑定上运行 - 如果输入是引用类型 - 当引用更改时。 即这样的对象:

{ 值:2 }

如果更改其 value 属性,则不会导致 ngchanges 运行。 这是因为 Angular 默认更改检测策略会比较引用。

Angular2 更改检测:ngOnChanges 不会为嵌套对象触发

然而,当我们考虑两种变化检测策略时,这对我来说似乎是矛盾的:

默认 - 组件的更改检测在绑定更改时发生 - 但根据上述内容,这不会识别引用类型的引用未更改的输入的更改。 或者换句话说,更改检测仅在值类型值更改或引用类型引用更改时运行。

OnPush - 更改检测仅在值类型值更改或引用更改时运行。

显然,默认更改检测不像我理解的那样工作,或者它与 OnPush 相同,但 onChanges 生命周期钩子似乎只在与 OnPush 相同的规则下触发。

Angular 将始终比较先前和新输入值的引用。 Default 和 OnPush 策略之间的区别在于 Angular何时触发更改检测。

使用Default策略 Angular 会进行脏检查,这意味着它每次都会检查您的应用程序中是否发生了某些变化:它将检查每个浏览器事件、任何 HTTP 调用、计时器......在大型应用程序中,这种方法有一个对性能影响很大。

通过OnPush更改检测,Angular 只会在其输入之一发生更改时检查组件(它依赖于不变性的概念来了解组件何时更改)。

如果您想更深入地了解 Angular Change Detection,我建议您阅读 Max Koretskyi 撰写的这篇文章,他详细解释了 Change Detection 的工作原理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM