Angular 手动触发变更检测

Angular 中可以通过两种方法来手动触发变更检测,分别是 detectChanges 和 markForCheck。本文就来好好说说这两者的区别。

detectChanges()

立刻对此组件以及子组件执行变更检测操作。由于是立刻更新此组件及其子组件,因此代价比较大。

markForCheck()

此方法将组件进行标记,使得下次变更检测到来时提示框架更新此组件视图。该方法的使用阶段比较讲究,开发者需在变化检测执行前调用方有效果。

Angular组件——组件生命周期(一)

按照 Angular 的生命周期顺序,开发者需要在组件 ngDoCheck 方法(包含)之前调用此方法, 这个方法常与 OnPush 策略合用, 因为 OnPush 策略的组件变更检测条件比较苛刻,若想在其他条件之外触发变更检测,则必须使用这个方法。

两者区别

两者区别在于前者是立刻触发组件及其子组件的变更检测,而后者仅仅对此组件进行标记。在下次变更检测时,一但判断此组件有这个标记,就对其执行变更检测。相比之下,后者更有效率,使用的时刻也需要开发者对 Angular 的生命周期有一个很好的理解。

参考链接

The Last Guide For Angular Change Detection You’ll Ever Need

生命周期顺序

发表评论

电子邮件地址不会被公开。 必填项已用*标注