我想知道是否可以通过将所有组件逻辑(包括组件内部非组件指令的逻辑)包装在一个区域中来将所有异步事件和回调追溯到特定的源组件,然后只需要检查该源组件对于更改以及具有来自源组件的更改输入的任何子组件,假设所有更改都遵循单向流。
这种理解合理吗?
这种变化检测策略在 Angular2 中可用吗?
为什么 Angular2 在任何异步 (XHR) 事件之后检测所有组件的更改?
最佳答案
整个 Angular 应用程序在单个区域中运行。 Angular 使用该区域来修补异步 API,并在每次发生某些异步事件时使用来自这些修补 API 的通知来运行更改检测。
单向流适用于仅适用于从父级到子级的[prop]="value"
绑定(bind)。
Angular 运行从根到叶子的更改检测。
如果为组件配置了 ChangeDetectionStrategy.OnPush
,则更改检测会跳过这些组件(及其后代),直到某些绑定(bind)(输入)发生更改。
还有其他优化 CD 的策略。
例如可观察量和 promise ,主动通知更改并且不需要更改检测。
保证不改变其属性值的不可变对象(immutable对象)。
更新
Angular 不知道事件处理程序更改了哪些值。组件的属性、全局服务的属性、传递的对象引用的属性……它只是假设当调用事件处理程序时,可能某些内容发生了更改,然后运行完整的更改检测周期来传播来自的所有绑定(bind) parent 对 child 。
子级与父级的绑定(bind)无论如何都是事件,因此在更改检测期间不会更新。
关于data-binding - Angular2 区域变化检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38079997/