gpt4 book ai didi

angular - 模板中有ngIf时如何判断Angular2组件是否完全加载(包括ViewChilds)

转载 作者:太空狗 更新时间:2023-10-29 17:20:57 24 4
gpt4 key购买 nike

当模板中有条件加载子项的 ngIf 时,是否可以识别 Angular2 组件(此处为 AppComponent)是否已完全加载(包括 ViewChilds)。

引用:Angular 2 @ViewChild annotation returns undefined这个例子取自上面的引用资料。感谢kenecaswell

import {Component, ViewChild, OnInit, AfterViewInit} from 'angular2/core';
import {ControlsComponent} from './child-component-1';
import {SlideshowComponent} from './slideshow/slideshow.component';

@Component({
selector: 'app',
template: `
<div *ngIf="controlsOn">
<controls ></controls>
<slideshow></slideshow>
</div>
`,
directives: [SlideshowComponent, ControlsComponent]
})

export class AppComponent {
@ViewChild(ControlsComponent) controls:ControlsComponent;
@ViewChild(SlideshowComponent) slide:SlideshowComponent;

controlsOn:boolean = false;

ngOnInit() {
console.log('on init', this.controls);
// this returns undefined
}

ngAfterViewInit() {
console.log('on after view init', this.controls);
// this returns null
}

}

由于 ngIf 条件,ngOnInit && ngAfterViewInit 在加载子组件之前被触发

我需要确定何时加载 SlideshowComponent 和 ControlsComponent 并根据它执行操作。

我有一个 hacky 解决方案,当有多个 ViewChild(不同类型)时不适合- 使用事件发射器通知 child 何时加载。

我发布这个问题是因为经过数小时的研究没有找到合适的解决方案。

最佳答案

PLUNKER

尝试使用 ViewChildren 而不是 ViewChild,它提供了一个 changes Observable,我们可以用作钩子(Hook)。

要跟踪所有的 ViewChildren,您可以将它们的 changes Observables 合并为一个并订阅它,然后您将获得单点操作,就像这样

  @ViewChildren(ChildCmp) children: QueryList<ChildCmp>;
@ViewChildren(AnotherChildCmp) anotherChildren: QueryList<ChildCmp>;

childrenDetector: Observable<any>; // merged observable to detect changes in both queries

ngAfterViewInit(){
this.childrenDetector = Observable.merge(this.children.changes, this.anotherChildren.changes)

this.childrenDetector.subscribe(() => {

// here you can even check the count of view children, that you queried
// eg: if(this.children.length === 1 && this.anotherChildren.length === 1) { bothInitialized(); }
// or something like that

alert('you just initialized a children');
});
}
}

关于angular - 模板中有ngIf时如何判断Angular2组件是否完全加载(包括ViewChilds),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38326284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com