Search code examples
angularangular-bootstrap

ngbTabset not updating tab programmatically


I'm trying to activate tab programmatically(not default active) through ngbTabset.select() but it's not working.

<ngb-tabset #ctdTabset="ngbTabset">
     <ngb-tab id="tab1">
       <ng-template ngbTabTitle>
         <div (click)="loadView('tab1')">
            <span>Tab 1</span>
         </div>
       </ng-template>
       <ng-template ngbTabContent>
         // tab 1 content here
       </ng-template>
   </ngb-tab>
   <ngb-tab id="tab2">
       <ng-template ngbTabTitle>
         <div (click)="loadView('tab2')">
            <span>Tab 2</span>
         </div>
       </ng-template>
       <ng-template ngbTabContent>
         // tab 2 content here
       </ng-template>
   </ngb-tab>
 </ngb-tabset> 

 // component.ts
 export class DashboardComponent implements OnInit {
   @ViewChild('ctdTabset') ctdTabset;

   ngOnInit() {
     this.switchNgBTab('tab2');
   }

   switchNgBTab(id: string) {

     this.ctdTabset.select(id);
   }
 }

It's not updating tab2, may be i did some wrong thing. please, could anyone help me. Your kindness will be appreciated. Thanks.


Solution

  • Use ngAfterViewInit. call switchNgBTab() from ngAfterViewInit instead of ngOnInit()

     import {Component, ViewChild} from '@angular/core';
    
    @Component({
      selector: 'ngbd-tabset-basic',
      templateUrl: './tabset-basic.html'
    })
    export class NgbdTabsetBasic { 
    
      @ViewChild('ctdTabset') ctdTabset;
    
      ngOnInit() {}
    
      ngAfterViewInit() {
        this.switchNgBTab('tab2');
      }
    
       switchNgBTab(id: string) {
         this.ctdTabset.select(id);
       }
    }
    

    The stackBlitz link : https://stackblitz.com/edit/angular-reywga-fgshaj?file=app%2Ftabset-basic.html