Ich habe drei Komponenten: App, Eltern und Kind:@ContentChildren wird nicht aufgefüllt werden
App Component
@Component({
selector: 'app',
directives: [Parent,Child],
template: '<parent><child>hi</child><child>there</child></parent>'
})
export class AppComponent {
constructor() {
}
}
geordnete Komponente
@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);
}
}
Untergeordnete Komponente
@Component({
selector: 'child',
template: '<div><h1>Child</h1></div>'
})
export class Child {
}
Wie Sie in der übergeordneten Komponente sehen können, habe ich versucht, @ContentChildren
zu verwenden, um die Liste der untergeordneten Komponenten zu erhalten, den Child
Typen als Selektor. Dies scheint jedoch nicht zu funktionieren - die Inhalts-Child-Liste ist immer undefiniert.
In der ngAfterContentInit()
-Methode hätte ich erwartet, dass die untergeordneten Inhalte gefüllt werden.
Fehle ich etwas?
[Update]
es stellt sich heraus, so dass das Problem besteht, wenn alle drei Komponenten in der gleichen Datei (siehe Konsole Debug-Fenster, wo ich Ausgabe des Inhalts Kinder):
Wenn sie in separaten Dateien sind das Problem weggeht:
Normalerweise würde ich alle Komponenten nur für Lernzwecke in derselben Datei speichern. Aber es hat mich neugierig gemacht. Weiß jemand, warum das Verhalten anders ist?
Die Kinder sind im DOM sichtbar? Ich habe es gerade versucht (in Dart) und es funktioniert. Haben Sie einen permissiveren Typ als 'QueryList' für die Variable wie 'any' versucht. –
@ GünterZöchbauer Ich habe versucht, den Typ zu ändern, aber das Problem ist immer noch da. Es scheint, dass es sich auf alle drei Komponenten bezieht, die sich in derselben Datei befinden. – pixelbits
Ich kann nicht in Dart reproduzieren (wenn das irgendeine Hilfe ist), es funktioniert auch mit allem in einer Datei. –