NgChanges on 在输入绑定上运行 - 如果输入是引用类型 - 当引用更改时。即像这样的对象:
{值:2}
如果其 value 属性更改,则不会导致 ngchanges 运行。这是因为 Angular 默认的更改检测策略会比较引用。
Angular2 更改检测:ngOnChanges 不会为嵌套对象触发
然而,当我们考虑两种变化检测策略时,这对我来说似乎是矛盾的:
默认 - 当绑定更改时,会发生组件的更改检测 - 但根据上面的说法,这不会识别引用类型的引用未更改的输入上的更改。或者换句话说,更改检测仅在值类型值更改或引用类型引用更改时运行。
OnPush - 更改检测仅在值类型值更改或引用更改时运行。
显然,默认的更改检测并不像我理解的那样工作,或者它与 OnPush 相同,但 onChanges 生命周期挂钩似乎只在与 OnPush 相同的规则下触发。
Angular 将始终比较先前输入值和新输入值的引用。Default 和 OnPush 策略之间的区别在于Angular何时触发更改检测。
通过DefaultAngular 进行脏检查的策略,这意味着它会在每次应用程序中发生更改时进行检查:它将对每个浏览器事件、任何 HTTP 调用、计时器执行检查......在大型应用程序中,这种方法有很大的好处对性能的影响。
通过OnPush更改检测,Angular 只会在其输入之一发生更改时检查组件(它依赖于不变性的概念来了解组件何时发生更改)。
如果您想更深入地了解 Angular 变更检测,我建议您阅读Max Koretskyi 撰写的这篇文章,他深入解释了变更检测的工作原理。
| 归档时间: |
|
| 查看次数: |
3137 次 |
| 最近记录: |