typescript 在Angular中,如果父组件有依赖异步http调用在UI上显示数据的子组件,如何确定父组件的完全渲染时间?

h6my8fg2  于 2023-05-01  发布在  TypeScript
关注(0)|答案(1)|浏览(131)

我有一个Angular Parent组件和3个Child组件。只有在我们从异步API调用中得到响应后,子组件才能完全呈现,并且我试图找到完全呈现(在UI上显示数据)这3个子组件所需的时间。下面是我如何编写代码的。
例如:

import { Component, OnInit, AfterViewInit } from '@angular/core';

@Component({
  selector: 'app-parent',
  template: `
    <h1>Parent Component</h1>
    <app-child1></app-child1>
    <app-child2></app-child2>
    <app-child3></app-child3>
  `,
})
export class ParentComponent implements OnInit, AfterViewInit {
  startTime : number = (new Date()).getTime();
  constructor() {}

  ngOnInit() {}

  ngAfterViewInit() {
    const endTime : number = (new Date()).getTime();
    console.log('module load time: '+ (endTime - this.startTime)); --> 1. Not giving the correct time taken to render the UI.
 }
}

1.甚至在完全呈现子组件之前,也会触发此方法ngAfterViewInit()。我认为这是因为子组件依赖于异步http响应来呈现,而父组件中的ngAfterViewInit()并不关心这一点,甚至在http响应返回之前就运行了
我在网上读到了性能导航定时API,ngZone。我能在这里用吗?如果是,如何处理?最好的办法是什么?

to94eoyn

to94eoyn1#

我想这是个误会。
父组件的ngAfterViewInit将始终在子组件之后运行。因此,当父对象的方法ngAfterViewInit()运行时,子对象已经完全呈现。获取异步http响应并重新呈现是另一个步骤,我们将其理解为更改检测。为了捕获这个错误,我们使用ngAfterViewChecked()并需要确定更改了什么。
我认为最简单的方法是创建一个eventEmitter,让父节点知道子节点的异步http响应何时完成

相关问题