javascript - 路线变化的 Angular 变化检测

标签 javascript angular dom routes angular2-changedetection

我已经阅读了一些关于 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/

相关文章:

javascript - 使用引导验证器验证密码并确认密码字段

javascript - 从 Facebook api 获取帖子

javascript - 如果在此期间发生其他事件,如何停止调用延迟函数?

javascript - 添加到第 3 方页面的 DOM 时如何避免 HTML ID 冲突?

javascript - 如果存在两个 DOM 代码,则会出现错误并且代码不会运行(但如果每个单独使用,则运行顺利)

javascript - 通过 JQuery Ajax 加载 ZeroClipboard 或 ZClip(复制到剪贴板按钮)

javascript - 如何获取 Angular 中的图像名称和扩展名?

javascript - Angular 2从comp1的html调用另一个组件(Comp2)中的函数

c# - Angular 7 与 SignalR Hub 的连接失败

html - 为什么杂散的 </p> 结束标记会生成一个空段落?