У меня есть ButtonGroupComponent , в котором мне нужно отобразить два типа дочерних элементов: ButtonActionComponent или ButtonNavigationComponent .
Мне нужно проецировать эти дети через @ContentChildren, но что я могу сделать, так как невозможно передать оба селектора?
@ContentChildren(??)
public children: QueryList<??>;
Итак, я попробовал другое решение: я создал компонент, GroupableButtonComponent, который расширяется двумя ( ButtonActionComponent и ButtonNavigationComponent ).
А затем я передал этот компонент ContentChildren напрямую:
@ContentChildren(GroupableButtonComponent)
public children: QueryList<GroupableButtonComponent>;
Но я обнаружил, что дочерние элементы остаются пустыми.
Еще одно решение, которое я пробовал, заключалось в использовании внедрения зависимостей и создании a GroupableButton class:
export class GroupableButton {
}
где ButtonActionComponent :
@Component({
selector: "button-action",
template: `
...
`,
providers: [{ provide: GroupableButton, useClass: ButtonActionComponent }],
})
export class ButtonActionComponent {
...
}
и ButtonNavigationComponent :
@Component({
selector: "button-navigation",
template: `
...
`,
providers: [{ provide: GroupableButton, useClass: ButtonNavigationComponent }],
})
export class ButtonNavigationComponent {
...
}
Я использовал его так:
@ContentChildren(GroupableButton)
public children: QueryList<GroupableButton>;
, но поскольку внутри моего компонента ButtonGroupComponent у меня есть:
...
this.children
.toArray()
.slice(0, visibleButtons)
.reverse()
.forEach((button) => {
const factory = this.factoryResolver.resolveComponentFactory(
GroupableButton
);
const component = this.visibleButtonsContainer.createComponent(
factory,
0,
null,
[[button.element.nativeElement]]
);
this.clonePropertiesFrom(button, component.instance);
this.buttons.push(component);
});
...
на этот раз проблема в том, что я не могу пройти GroupableButton в качестве компонентов входа внутри моего модуля.