ist Ist es möglich, eine Angular2-Komponente (hier AppComponents) vollständig geladen (einschließlich ViewChilds), wenn in Template unter welchen Bedingungen lädt das Kind.Identifizieren, ob eine Angular2-Komponente vollständig geladen ist (einschließlich ViewChilds), wenn in Template
Referenz: Angular 2 @ViewChild annotation returns undefined Dieses Beispiel ist der obigen Referenz entnommen. Dank 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
}
}
Die ngOnInit & & ngAfterViewInit vor den untergeordneten Komponenten ausgelöst werden, weil der Zustand ngIf geladen
ich identifizieren müssen, wenn SlideshowComponent & ControlsComponent geladen werden und eine Aktion ausführen, auf der Grundlage dieser.
Ich habe eine Hacky-Lösung, die nicht geeignet ist, wenn mehrere ViewChilds (die von unterschiedlichem Typ sind) - Verwenden eines Ereignisemitter zu informieren, wenn das Kind geladen wird.
Ich poste diese Frage, da es nach Stunden der Forschung keine richtige Lösung gab.
Hallo, Mein Problem ist, dass ich 3 Komponenten (ViewChild) unterschiedlichen Typs habe und ich möchte identifizieren, wenn alle drei Komponenten (ViewChild) geladen sind und eine Aktion ausführen. Ich habe die Frage aktualisiert. Danke – tymspy
Ich bin drauf, lass mich sehen, was ich tun kann .... –
OK, das Problem wird durch '* ngIf' verursacht, die Kinderkomponenten nicht auf ViewInit initialisieren, jetzt macht' ViewChildren' noch mehr Sinn, weil Es kann Ihnen sagen, wenn die Kinder initialisiert, siehe [diese PLUNKER] (http://plnkr.co/edit/HevkaqUyqmkAnvgPwm7v?p=preview) –