我已经阅读了一些关于 Angular 中的 Change Detection
的好文章,并对它是什么以及它的工作原理有了一定的了解。但是到目前为止,我读过的每篇文章都只关注组件上发生某些事件或某些 input
属性发生变化时的 Change Detection
等。我还没有找到任何文章重点是当 route
改变时会发生什么? Change Detection
在这种情况下如何工作?此外,Angular 是立即将所有 HTML/DOM 更新推送到浏览器,还是一发现任何 DOM 更新就不断地向浏览器提供数据?
最佳答案
路由不会触发变化检测。它唯一特定于变化检测的是 marking for check 被激活的路由器导出组件:
@Directive({selector: 'router-outlet', exportAs: 'outlet'})
export class RouterOutlet implements OnDestroy, OnInit {
...
activateWith(activatedRoute: ActivatedRoute, resolver: ComponentFactoryResolver|null) {
...
// Calling `markForCheck` to make sure we will run the change detection when the
// `RouterOutlet` is inside a `ChangeDetectionStrategy.OnPush` component.
this.changeDetector.markForCheck();
this.activateEvents.emit(this.activated.instance);
}
路由器由 NgZone 拦截的一些事件 UI 或其他(setTimeout、XHR)等导航,一旦代码执行完更改检测过程就会启动。
Also, does Angular pushes all HTML/DOM updates at once to the browser or does it keep feeding the browser constantly as soon as it finds any DOM update?
它在遍历每个组件时逐个元素地更新 DOM。有关更改检测的最全面解释,请阅读以下所有文章:
关于javascript - 路线变化的 Angular 变化检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47462800/