一种解决方法是将* ngIf嵌套在父组件的容器元素中,而不是在子组件中使用。这会确保在* ngIf条件运行之前,子组件不会被加载或显示。如下所示:
// 父组件
// 子组件
注意:如果子组件已经在应用程序中的其他位置使用,则可能需要重新组织你的组件层次结构。
另一个解决方法是在子组件的构造函数中订阅ngOnChanges生命周期钩子。这将确保在* ngIf条件运行之前不会发出请求或加载子组件。见以下示例:
// 父组件
// 子组件
// 子组件.ts
import { Component, OnChanges } from '@angular/core';
@Component({ selector: 'child-component', templateUrl: './child-component.component.html', styleUrls: ['./child-component.component.css'] }) export class ChildComponent implements OnChanges {
constructor() { }
ngOnInit() { }
ngOnChanges(changes: SimpleChanges): void { if (changes.showChild) { if (changes.showChild.currentValue) { // 请求或加载数据 } else { // 隐藏子组件 } } }
}
注意:这种方法可以解决组件已加载但被隐藏的问题,但它可能会在性能方面产生一些开销。