我想创建一个选项卡组件。这应该是最终结果:
<app-tab-container>
<app-tab-item caption="A">..contentA..</app-tab-item>
<app-tab-item caption="B">..contentB..</app-tab-item>
<app-tab-item caption="C">..contentC..</app-tab-item>
</app-tab-container>
tabitemcomponent有一个@hostbinding(“hidden”)修饰字段:
export class TabItemComponent {
@HostBinding('hidden') isHidden = false;
@Input() caption: string;
}
在TabContainerComponent中,我使用@ContentChildren迭代选项卡项:
export class TabContainerComponent {
@ContentChildren(TabItemComponent) items: QueryList<TabItemComponent>;
tabItems: string[] = [];
ngAfterContentInit() {
this.items.forEach((item, idx) => {item.isHidden = true; this.tabItems.push(item.caption));
}
}
最后,tabContainerComponent模板如下:
<div class="tab-title"
*ngFor="let caption of tabItems">{{caption}}</div>
<ng-content></ng-content>
最终目标是通过单击事件切换选项卡项的可见性。
当我正确运行代码选项卡标题,但内容本身(app tab item caption=“a”to“c”)仍然可见时,设置ishidden不会切换可见性。
请注意,我不知道“app tab item”组件的数量,因为我可以将“app tab container”放在其他具有不同内容的地方。
如何以编程方式切换
<app-tab-item>
组件使用@contentchildren?