Ho tre componenti: App, Genitori e bambini:@ContentChildren non vengono popolati
App componenti
@Component({
selector: 'app',
directives: [Parent,Child],
template: '<parent><child>hi</child><child>there</child></parent>'
})
export class AppComponent {
constructor() {
}
}
Parent componente
@Component({
selector: 'parent',
template: '<div><h1>Parent</h1><ng-content></ng-content></div>'
})
export class Parent {
@ContentChildren(Child) children: QueryList<Child>;
ngAfterContentInit() {
console.log(this.children);
}
}
Componente figlio
@Component({
selector: 'child',
template: '<div><h1>Child</h1></div>'
})
export class Child {
}
Come si può vedere nella componente genitore, ho cercato di usare @ContentChildren
per ottenere la lista dei componenti del bambino, utilizzando il tipo Child
come selettore. Tuttavia, questo non sembra funzionare - l'elenco dei contenuti dei bambini è sempre indefinito.
Nel metodo ngAfterContentInit()
, mi sarei aspettato che i contenuti fossero popolati.
Mi manca qualcosa?
[Update]
Così si scopre che il problema esiste quando tutti e tre i componenti sono nello stesso file (vedi finestra della console di debug in cui l'uscita ho i contenuti figli):
Se sono in file separati il problema scompare:
Normalmente, inserisco tutti i componenti nello stesso file solo a scopo di apprendimento. Ma mi ha incuriosito. Qualcuno sa perché il comportamento è diverso?
I bambini sono visibili nel DOM? L'ho appena provato (in Dart) e funziona. Hai provato un tipo più permissivo di 'QueryList' per la variabile come 'any'. –
@ GünterZöchbauer Ho provato a cambiare tipo, ma il problema è ancora lì. Sembra che sia correlato a tutti e tre i componenti nello stesso file. – pixelbits
Non riesco a riprodurre in Dart (se questo è un aiuto), funziona anche con tutto in un unico file. –