Angular 组件上的两个 ngcontent
Two ngcontent on a Angular component
我创建了一个 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 代码,我想我的想法是正确的。
可以通过 CSS 样式与 ng-content 转换来解决。这里有 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>
这个方法我觉得还不错
我创建了一个 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 代码,我想我的想法是正确的。
可以通过 CSS 样式与 ng-content 转换来解决。这里有 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>
这个方法我觉得还不错