Я знаком с понятием @ContentChildren
, но мой случай почему-то не появляется в Angular Библии, они даже написали это:
Не извлекает элементы или директивы, которые находятся в Шаблоны других компонентов, поскольку шаблон компонента всегда является черным ящиком для его предков.
У меня есть эта разметка:
<layers>
<layer></layer>
<layer></layer>
</layers>
Это то, что я пытался делать, и я все время получаю пустой список:
import {
AfterContentInit,
ChangeDetectionStrategy,
Component,
ContentChildren,
QueryList
} from '@angular/core';
@Component({
selector: 'layers',
changeDetection: ChangeDetectionStrategy.OnPush,
template: '<ng-content></ng-content>'
})
export class LayersComponent implements AfterContentInit {
@ContentChildren(LayerComponent) layers:QueryList<LayerComponent>;
constructor() {
}
ngAfterContentInit(): void {
console.log(this.layers);
}
}
Решение, которое мне помогло - использовать сервис root, который внедряется в каждый слой и предоставляет API для регистрации текущего экземпляр компонента в сервис - но это усложняет для меня, спасибо.