Der beste Weg, um auf eine untergeordnete Komponente zuzugreifen, ist @ViewChild .
Angenommen, Sie haben AppMainComponent mit einer verschachtelten ChildComponent aus Ihrem Beispiel.
import { Component } from '@angular/core';
@Component({
selector: 'app-main',
template: `
<child-component />
`
})
export class AppMainComponent {}
Sie möchten eine eindeutige Methode aus Ihrer ChildComponent aufrufen.
import { Component } from '@angular/core';
@Component({
selector: 'child-component',
template: '{{ greeting }}'
})
class ChildComponent {
greeting: String = 'Hello World!';
clear() {
this.greeting = null;
}
}
Sie können dies erreichen, indem Sie die ChildComponent-Klasse, den ViewChild-Dekorator und die darin enthaltene Komponentenklasse als Abfrage importieren. Auf diese Weise hätten Sie Zugriff auf die in der benutzerdefinierten Variablen gespeicherte Schnittstelle der ChildComponent. Hier ist ein Beispiel:
import { Component, ViewChild } from '@angular/core';
import { ChildComponent } from './components/child/child.component';
@Component({
selector: 'app-main',
template: `
<child-component />
`
})
class ChildComponent {
@ViewChild(ChildComponent)
child: ChildComponent;
clearChild() {
this.child.clear();
}
}
Beachten! Die untergeordnete Ansicht wird erst nach ngAfterViewInit verfügbar .
Antworten Sie, nachdem Angular die Ansichten und untergeordneten Ansichten der Komponente initialisiert hat. Wird einmal nach dem ersten ngAfterContentChecked () aufgerufen. Ein Haken nur für Komponenten.
Wenn Sie die Methode automatisch ausführen möchten, müssen Sie dies innerhalb dieses Lebenszyklus-Hooks tun.
Sie können auch eine QueryList mit untergeordneten Komponenten über ViewChildren Decorator abrufen .
import { Component, ViewChildren, QueryList } from '@angular/core';
import { ChildComponent } from './components/child/child.component';
...
@ViewChildren(ChildComponent)
children: QueryList<ChildComponent>;
QueryList kann sehr nützlich sein, z. B. können Sie untergeordnete Änderungen abonnieren.
Es ist auch möglich, Vorlagenreferenzvariablen zu erstellen und über den ViewChild-Dekorator darauf zuzugreifen.
@ViewChild(ComponentName) child;
und laut den Dokumenten ist sie erst nach demngAfterViewInit()
Lifecycle-Hook verfügbar .