我有一个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。我能在这里用吗?如果是,如何处理?最好的办法是什么?
1条答案
按热度按时间to94eoyn1#
我想这是个误会。
父组件的ngAfterViewInit将始终在子组件之后运行。因此,当父对象的方法ngAfterViewInit()运行时,子对象已经完全呈现。获取异步http响应并重新呈现是另一个步骤,我们将其理解为更改检测。为了捕获这个错误,我们使用ngAfterViewChecked()并需要确定更改了什么。
我认为最简单的方法是创建一个eventEmitter,让父节点知道子节点的异步http响应何时完成