【问题标题】:How do change detection strategies distinguish?变化检测策略如何区分?
【发布时间】:2015-12-24 20:46:03
【问题描述】:

根据Angular.io docs,变更检测有7种策略: CheckOnce、检查、CheckAlways、分离、OnPush、默认、OnPushObserve 我是这里的菜鸟,所以我真的很难理解。有人可以解释一下它们之间的区别。谢谢!

【问题讨论】:

标签: angular


【解决方案1】:

不是对问题的严格回答,但仍可能为人们指明正确的方向:

显然,Angular 框架的消费者应该使用只有两种检测策略:DefaultOnPush
其他机制仅由 Angular 内部使用。有关更多详细信息,请查看 Angular 存储库中的 this 线程。

关于 OnPush 策略可能对其他人有所帮助的小说明:

当使用 OnPush 策略时,只有当 Immutable 对象从外部更新时才会自动获取更改(示例中的第 53 行)下面)。
如果“@Input() 属性”在组件内更新,那么我们需要通知更改检测器我们有更改,以便组件反映新值。我们使用 .markForCheckwill mark all ChangeDetectionStrategy ancestors as to be checked 来做到这一点(下例中的第 30 行)。

这里是一个例子:http://plnkr.co/edit/bp00rvDgAp8ljTLJEmHI?p=preview (从http://plnkr.co/edit/oT8F8m?p=preview更新和分叉)

玩转第 30 行:

// this.ref.markForCheck(); // uncomment it to manually apply changes

如果该行被注释掉,我们将不会看到组件使用组件构造函数内的超时设置的值更新(第 24 行)。

我们只会看到使用组件外部超时设置的值更新的组件(第 53 行)。

一旦我们取消注释该行,组件就会使用组件内部超时设置的值进行更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-03
    • 2020-09-29
    • 1970-01-01
    • 2018-03-30
    • 2021-12-06
    • 2019-08-20
    • 2021-10-20
    • 2013-07-14
    相关资源
    最近更新 更多