变化检测策略如何区分?

时间:2015-12-24 20:46:03

标签: angular

根据Angular.io docs,有7种变化检测策略: CheckOnce,Checked,CheckAlways,Detached,OnPush,Default,OnPushObserve 我在这里是个菜鸟,所以我很难理解。有人可以解释他们之间的区别。谢谢!

1 个答案:

答案 0 :(得分:0)

对问题不是一个严格的答案,但可能仍然指出人们正确的方向:

显然,Angular框架的消费者应该使用仅两种检测策略:默认 OnPush
其他机制仅在内部由Angular使用。有关更多详细信息,请查看Angular的回购邮件中的this主题。

对于 OnPush 策略可能对其他人有所帮助的小澄清:

使用 OnPush策略时,只有当Immutable对象从外部更新时,才会自动选择 更改<示例中的第53行下文)。
如果“@Input()属性在组件内更新,那么我们需要通知变更检测器我们有更改,以便组件反映新的值。我们使用.markForCheck使用will 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行)。

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