根据Angular.io docs,有7种变化检测策略: CheckOnce,Checked,CheckAlways,Detached,OnPush,Default,OnPushObserve 我在这里是个菜鸟,所以我很难理解。有人可以解释他们之间的区别。谢谢!
答案 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行)。
一旦我们取消注释该行,然后使用组件内部超时设置的值更新组件。