У меня есть три компонента: App, Parent и Child:
Компонент приложения
@Component({
selector: 'app',
directives: [Parent,Child],
template: '<parent><child>hi</child><child>there</child></parent>'
})
export class AppComponent {
constructor() {
}
}
Родительский компонент
@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);
}
}
Детский компонент
@Component({
selector: 'child',
template: '<div><h1>Child</h1></div>'
})
export class Child {
}
Как вы видите в родительском компоненте, я попытался использовать @ContentChildren
, чтобы получить список дочерних компонентов, используя тип Child
в качестве селектора. Однако, похоже, это не работает - список дочерних элементов контента всегда undefined.
В методе ngAfterContentInit()
я ожидал, что дети содержимого будут заполнены.
Я что-то упустил?
[Обновление]
Таким образом, оказывается, что проблема существует, когда все три компонента находятся в одном файле (см. окно отладки консоли, в котором я выводил содержимое содержимого):
Если они находятся в отдельных файлах, проблема исчезает:
Как правило, я только размещал все компоненты в одном файле для обучения. Но мне это любопытно. Кто-нибудь знает, почему поведение отличается?