Вы можете попробовать использовать *ngFor
для поддержания динамических вкладок
html
<mat-tab-group #tabsGroup (selectedTabChange)="tabChanged($event)" (selectedIndexChange)="selectedIndexChange($event)" [(selectedIndex)]="selectedIndex">
<mat-tab *ngFor="let tab in tabList" id="{{tab.tabId}}" label="tab.label">
<div [innerHtml]="tab.innerHtml"></div>
</mat-tab>
<mat-tab-group>
ts
tabList = [{
label: 'First Tab',
innerHtml: `<div>hello, World!</div>`,
tabId: 'tab1'
}, {
label: 'Second Tab',
innerHtml: `<div>I am a different Tab</div>`,
tabId: 'tab2'
}];
Затем оттуда вы можете отсортировать объект this.tabList
так, как вы хотите, с вашими условиями
РЕДАКТИРОВАТЬ:
После вопроса вкомментарии о *ngIf
на <mat-tab>
, вот пересмотренный ответ с *ngIf
заявлениями
html
<mat-tab-group #tabsGroup (selectedTabChange)="tabChanged($event)" (selectedIndexChange)="selectedIndexChange($event)" [(selectedIndex)]="selectedIndex">
<ng-template ngFor let-tab [ngForOf]="tabList">
<mat-tab *ngIf="tab.showTab || someHideFunction(tab)" id="{{tab.tabId}}" label="tab.label">
<div [innerHtml]="tab.innerHtml"></div>
</mat-tab>
</ng-template>
<mat-tab-group>
ts
tabList = [{
label: 'First Tab',
innerHtml: `<div>hello, World!</div>`,
tabId: 'tab1',
showTab: true
}, {
label: 'Second Tab',
innerHtml: `<div>I am a different Tab</div>`,
tabId: 'tab2',
showTab: false
}, {
label: 'Third Tab',
innerHtml: `<app-custom-component [input]="tempVariable"></app-custom-component>`,
tabId: 'tab3',
showTab: true
}];