如何从Angular4中的bootstrap tabset获取选定的选项卡?

时间:2017-07-25 18:54:10

标签: html twitter-bootstrap angular ng-bootstrap

我有一组动态创建的选项卡,具体取决于我的输入数据。我想要做的是能够找出当前选择的选项卡。在下面的示例代码中,我有一个选项卡控件,在所有这些之下,我有一个按钮,单击该按钮将删除所选选项卡。我试图保持这个相对简单,看起来可能有些做作,但我希望它可以说明我的意思。

这是我的代码:

<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() {


  }

}

所以,我想说我要删除当前选中的标签。我如何知道当前选择了哪个标签?

2 个答案:

答案 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

希望这有帮助!