angular - 我如何知道子元素何时在 Angular 中完成渲染?

标签 angular angular-routing

我有一个布局组件,它有一个 <router-outlet>其中子组件由路由器动态插入。

我怎么知道,何时插入子元素并完成构建它的 View ?

此外,我无法手动从子组件触发事件,因为我希望此解决方案是通用的。

最佳答案

路由器调用 router-outlet 上的 activateWith 方法创建一个 componentRef 并将其附加到 router-outlet容器。然后它发出 activate 事件:

this.activateEvents.emit(this.activated.instance);

此时,组件的 View 已创建并附加到 DOM。但是,仅执行附加组件的构造函数。还没有生命周期钩子(Hook)。在下一次更改检测期间,将调用附加组件的生命周期 Hook 。

您可以通过 (activate) 输出订阅此事件,如 yurzui 所示:

<router-outlet (activate)="onActivated($event)"></router-outlet>

或使用不推荐的事件发射器:

this.outlet.activateEvents.subscribe((component) => {
      this.activated = true; 
});

因此,例如,如果您想知道何时为子组件调用了 ngOnInit,您可以这样做:

const activated = false;

onActivated() {
   this.activated = true; 
});

ngAfterViewInit() {
   if (this.activated) {
     // lifecycle hooks for the child component have been called
   }
}

关于angular - 我如何知道子元素何时在 Angular 中完成渲染?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44888650/

相关文章:

javascript - 如何通过了解身份验证状态访问 protected 路由/禁用 Auth Guard

c# - Angular2 中的 Http PUT 到 .NET Core Web API 在预检请求中出现 http 401 错误

Angular NG5002错误无效的ICU消息和意外的字符EOF

unit-testing - Angular 2 Jasmine 无法绑定(bind)到 'routerLink',因为它不是 'a' 的已知属性

javascript - 如何在AngularJS中使用一个模板和 Controller 进行嵌套路由?

angular - 带有 Angular 6 的 ionic 4 路由

html - 更改 Toast 消息的背景颜色 Ionic 4

node.js - 本地主机 :4200 not working for my angular app

angular - ionic 2 : navigate using URLs

angularjs - 根据路由组动态加载 Controller