我有一组动态创建的选项卡,具体取决于我的输入数据。我想要做的是能够找出当前选择的选项卡。在下面的示例代码中,我有一个选项卡控件,在所有这些之下,我有一个按钮,单击该按钮将删除所选选项卡。我试图保持这个相对简单,看起来可能有些做作,但我希望它可以说明我的意思。
这是我的代码:
<div class="col-md-12">
<ngb-tabset *ngIf="selectedInfo" type="groups" >
<ngb-tab *ngFor="let tab of selectedInfo.groups" title={{tab.name}} >
// some stuff in the tabs
</ngb-tab>
</ngb-tabset>
</div>
<div>
<button class="btn btn-primary float-left" (click)="deleteTab()" > Delete Tab </button>
</div>
export class MyTabs implements OnInit {
selectedIfno: MyInfoClass;
ngOnInit(): void {
// init data
}
deleteTab() {
}
}
所以,我想说我要删除当前选中的标签。我如何知道当前选择了哪个标签?
答案 0 :(得分:8)
我建议听一下tabChange
更改事件 - 这样可以“拦截”活动页面更改的所有情况,并存储有关当前所选选项卡的信息。以下是该想法的草图:
<ngb-tabset [activeId]="activeTab" (tabChange)="activeTab = $event.nextId">
...
</ngb-tabset>
一个工作的掠夺者:http://plnkr.co/edit/4vRDHgWMhcvafXhQkxEO?p=preview
在输入答案时,我意识到跟踪活动标签你自己可能会有点痛苦,我们可以将这个功能添加到标签集本身。请随时在https://github.com/ng-bootstrap/ng-bootstrap/issues
打开功能请求答案 1 :(得分:5)
您可以使用Angular activeId
获取NgbTabset的有效标签ID(@ViewChild()
),以便从HTML中检索NgbTabset
的实例。然后,您可以访问类方法中的activeId
。考虑到您是我们*ngIf
,您可能需要为此question中所述的@ViewChild()
创建一个setter。我已经更新了示例以使用setter。
<强> HTML:强>
<div class="col-md-12">
<ngb-tabset #t="ngbTabset" *ngIf="selectedInfo" type="groups">
<ngb-tab *ngFor="let tab of selectedInfo.groups" title={{tab.name}} >
// some stuff in the tabs
</ngb-tab>
</ngb-tabset>
</div>
<强> TS:强>
import { Component, ViewChild, ViewContainerRef } from '@angular/core';
import { NgbTabset } from '@ng-bootstrap/ng-bootstrap';
export class MyTabs implements OnInit {
private tabSet: ViewContainerRef;
@ViewChild(NgbTabset) set content(content: ViewContainerRef) {
this.tabSet = content;
};
ngAfterViewInit() {
console.log(this.tabSet.activeId);
}
deleteTab() {
// currently selected tab id
console.log(this.tabSet.activeId);
}
}
这是展示功能的plunker。
希望这有帮助!