angular - Angular 组件上的两个 ngcontent
问题描述
我创建了一个 Tabs 组件(https://stackblitz.com/edit/angulartabs),使用如下:
<tabs>
<tab title="tab 1">Content 1</tab>
<tab title="tab 2" active="true">Content 2</tab>
</tabs>
选项卡组件 HTML 如下:
<div class="head">
<ul class="tabs">
<li *ngFor="let tab of tabs" (click)="select(tab)" class="tab" [class.active]="tab.active">
<a>{{ tab.title }}</a>
</li>
</ul>
<div class="toolbar">Toolbar</div>
</div>
<ng-content></ng-content>
这是可行的,但我还需要在选定选项卡更改时更改工具栏标记。
因此,对于每个选项卡,我需要定义其内容和工具栏。
这个怎么做?
更新
也许使用选项卡时的 HTML 标记应该是:
<tabs>
<tab title="tab 1">
<toolbar>Tab 1 toolbar</toolbar>
Content 1
</tab>
<tab title="tab 2" active="true">
Content 2
</tab>
</tabs>
在选项卡 2 中没有工具栏,这也是一个选项...
内容是否也需要包装在标签中?
<tab title="tab 1">
<toolbar>Tab 1 toolbar</toolbar>
<content>Content 1</content>
</tab>
解决方案
更新
由于您的 stackblitz 代码,我想我得到了一个正确的想法。
它可以通过带有 ng-content translusion 的 CSS 样式来解决。这是带有样式属性的 HTML 代码。
app.component.html:
<tabs>
<tab title="tab 1">
Content 1
<div class="toolbar">Toolbar 1</div>
</tab>
<tab title="tab 2" active="true">
Content 2
<div class="toolbar">Toolbar 2</div>
</tab>
</tabs>
tabs.component.html:
<div style="position: relative">
<div class="head">
<ul class="tabs">
<li *ngFor="let tab of tabs" (click)="select(tab)" class="tab" [class.active]="tab.active">
<a>{{ tab.title }}</a>
</li>
</ul>
</div>
<ng-content></ng-content>
</div>
tab.component.html:
<div *ngIf="active" style="position: absolute; right: 0; top: 0">
<ng-content select=".toolbar"></ng-content>
</div>
<div [hidden]="!active" class="pane">
<ng-content></ng-content>
</div>
这种方法我觉得还不错。
推荐阅读
- html - 反应形式的输入/离子输入 - ChangeDetectionStrategy 的问题
- python - 抓取表只返回“表”而不是表的内容
- linux - 每天在带有 Linux Ubuntu 的 Google Compute Engine 上运行 python 文件
- c# - 反序列化嵌套字典
- python - 即使在我的机器上安装了在 Jupiter 笔记本上导入 openCV 的问题
- redhat - 在不支持 AVX 指令的 Linux 机器上导入并运行 Tensorflow 2
- html - 无论我选择什么选项,选择都是空白的
- firebase - 如何在firestore中获取文档,其文档ID存储在列表中?即只带那些文档....?
- amazon-pay - 如何调整 Amazon Pay 计费协议的频率和持续时间
- python - 在 pytorch 中,是否有内置方法来提取具有给定索引的行?