Angular 路线变化的变化检测

Angular Change Detection on a route change

我在 Angular 中阅读了一些关于 Change Detection 的好文章,并对它是什么以及它的工作原理有了一定的了解。但是到目前为止,我读过的每篇文章都只关注 Change Detection 当组件上发生某些事件或某些 input 属性 发生变化时等。我还没有找到任何文章关注当 route 改变时会发生什么? Change Detection 在这种情况下如何运作?此外,Angular 是立即将所有 HTML/DOM 更新推送到浏览器,还是一旦发现任何 DOM 更新就不断地向浏览器提供信息?

路由不会触发更改检测。它唯一特定于变化检测的是 正在激活的路由器出口组件:

@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。如需更改检测的最全面解释,请阅读以下所有文章: