变更检测是 Angular 中一个非常重要的机制,它能够检测应用程序中的数据变化,并将这些变化反映到视图中。在 Angular 6 中,变更检测机制发生了一些重要的变化。这篇文章将会介绍这些变化,并说明它们对于 Angular 开发者来说有什么影响。
变更检测简介
在 Angular 中,每当数据发生变化时,就会触发变更检测机制。这个机制会遍历整个组件树,并查找每个组件的变化。当它发现一个变化时,它会通知 Angular 平台,以便平台能够更新视图。
有两种类型的变更检测:基于引用和基于值。基于引用变更检测会检测引用是否发生了变化,而基于值变更检测则会比较对象的属性是否发生了变化。
Angular 6 中的变更检测变化
在 Angular 6 中,变更检测机制发生了两个重要的变化:默认情况下采用了 OnPush 策略,并引入了更好的 ChangeDetectorRef API。
采用 OnPush 策略
在 Angular 6 中,所有的组件都默认采用了 OnPush 变更检测策略。这个策略是基于引用的,只有在输入属性发生变化,或者组件自身发生事件时,才会触发变更检测。
OnPush 策略能够提高应用程序的性能,因为它将减少不必要的变更检测。不过需要注意的是,这个策略可能导致一些问题。如果你的组件依赖于来自父组件或全局服务的数据,而这些数据没有采用 OnPush 策略,就会导致组件不会更新。
为了解决这个问题,Angular 6 引入了 ChangeDetectionStrategy.Default 选项。如果你需要使用默认变更检测策略,就可以使用这个选项。
更好的 ChangeDetectorRef API
ChangeDetectorRef 是一个 Angular 中非常重要的 API,它允许你手动触发变更检测。在 Angular 6 中,这个 API 发生了一些改进。
首先,ChangeDetectorRef 现在会自动跟踪变更检测器的状态,并且在必要时自动更新状态。如果你手动触发变更检测,它将只更新那些还未检测过的组件。
另外,ChangeDetectorRef 还增加了 markForCheck 方法。这个方法能够告诉 Angular 以后有一个变化需要处理,但是它不会立即触发变更检测。这个 API 尤其适合在处理大量数据时。
-- -------------------- ---- ------- ------ - ---------- ----------------- - ---- ---------------- ------------ --------- ----------- --------- - ------- ---- -------- ------- ----------------------------- ------------- -- ---------------- ------------------------------ -- ------ -- -- ------ ----- ------------ - ---- - ---------- ------------------- ---- ------------------ -- ------------ - --------- - -------- --- ------------------------ -- ----------- - -
结论
Angular 6 中的变更检测机制发生了重要的变化。采用 OnPush 策略可以提高应用程序的性能,而更好的 ChangeDetectorRef API 可以帮助你更好地控制变更检测机制的行为。不过需要注意的是,这些变化可能会导致一些问题,需要开发者仔细调试和排查。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67505fbffbd23cf8907738d0