Il modo migliore per accedere a un componente figlio è @ViewChild.
Supponiamo che tu abbia AppMainComponent con un componente figlio nidificato dal tuo esempio.
// app-main.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-main',
template: `
<child-component />
`
})
export class AppMainComponent {}
Si desidera richiamare un metodo chiaro da ChildComponent.
// child.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'child-component',
template: '{{ greeting }}'
})
class ChildComponent {
greeting: String = 'Hello World!';
clear() {
this.greeting = null;
}
}
Si può realizzare importando la classe ChildComponent, ViewChild decoratore e passare di classe del componente in esso come una query. In questo modo, avresti accesso all'interfaccia di ChildComponent memorizzata nella variabile personalizzata.Ecco un esempio:
// app-main.component.ts
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();
}
}
Avviso! La visualizzazione figlio diventa disponibile solo dopo ngAfterViewInit.
Risposta dopo Angolare inizializza le viste del componente e le viste secondarie. Chiamato una volta dopo il primo ngAfterContentChecked(). Un hook solo componente.
Se si desidera eseguire il metodo automaticamente, è necessario farlo all'interno di questo hook ciclo di vita.
È inoltre possibile ottenere un QueryList di componenti figlio tramite il decoratore ViewChildren.
import { Component, ViewChildren, QueryList } from '@angular/core';
import { ChildComponent } from './components/child/child.component';
...
@ViewChildren(ChildComponent)
children: QueryList<ChildComponent>;
QueryList potrebbe essere molto utile, ad es. puoi iscriverti alle modifiche dei bambini.
È anche possibile creare template reference variables e accedervi tramite il decoratore ViewChild.
Penso che la sintassi sia' @ViewChild (ComponentName) child; 'e secondo [i documenti] (https://angular.io/docs/ts/latest/api/core/ViewChild-var.html) non è disponibile fino all'hook del ciclo di vita 'ngAfterViewInit()'. –
L'ho provato. Quando viene passata una stringa, cerca le variabili del template con questo nome, altrimenti un componente o una direttiva del tipo passato. "Selector" nei documenti è un po 'fuorviante. –
Grazie per l'aggiornamento. Ho esaminato il [codice sorgente per ViewChild] (https://github.com/angular/angular/blob/2.0.0-beta.0/modules/angular2/src/core/metadata.ts#L1147-L1147), e dice "Supporta gli stessi parametri di interrogazione di QueryMetadata, eccetto i discendenti." Il [QueryMetadata API doc] (https://angular.io/docs/ts/latest/api/core/QueryMetadata-class.html) spiega tutti i diversi tipi di "selettori" che sono supportati. (Trovare questa roba è così doloroso al momento.) –