嵌套 Angular material 个标签

Nested Angular material tabs

我需要向某些 User Preferences 屏幕添加动态选项卡。 主首选项选项卡可以是具有静态内容的静态选项卡,但第二个选项卡应该具有嵌套的 mat-tab 元素。

这些额外的动态首选项来自后端,然后允许我使用 *ngFor 来呈现额外的选项卡。

我现在看到的问题是选项卡 labels。标签文本的值来自第一个嵌套选项卡,而不是来自我正在设置的 label 属性。

请在此处查看我在 stackblitz 上的示例 - https://stackblitz.com/edit/mat-tabs-nested?embed=1&file=app/tab-group-async-example.html

在线项目的代码片段是:

<mat-tab-group>

...

<mat-tab label="More Dynamic Preferences">

    <!-- NESTED HERE -->    
    <mat-tab-group>
      <mat-tab *ngFor="let tab of asyncTabs | async">
        <ng-template mat-tab-label>{{tab.label}}</ng-template>
        {{tab.content}}
      </mat-tab>
    </mat-tab-group>

  </mat-tab>
  
</mat-tab-group>    

如果单击 "More Dynamic Preferences" 选项卡,则选项卡 header 文本变为 "First"。第二个选项卡也会发生同样的情况,我正在同步加载其选项卡内容,而不是异步示例。

我不确定 <ng-template> 元素在 <mat-tabs> 元素中的用途是什么,但是在删除这些元素之后,向选项卡的 label 输入添加一些绑定组件,并将异步调用重构为不使用 setTimeout() 并使用本机 rxjs 操作,我有一个使用嵌套选项卡和动态选项卡创建的工作演示:

  <mat-tab label="Customer Preferences"> 
    <h2>HERE ARE YOUR PREFERENCES</h2>
  </mat-tab> 

  <mat-tab label="Dynamic Preferences">
    <mat-tab-group>
      <mat-tab *ngFor="let tab of prefTabs" [label]="tab.label">
        {{tab.content}}
      </mat-tab>
    </mat-tab-group>
  </mat-tab>

  <mat-tab label="More Dynamic Preferences">
    <mat-tab-group>
      <mat-tab *ngFor="let tab of asyncTabs | async" [label]="tab.label">
        {{tab.content}}
      </mat-tab>
    </mat-tab-group>
  </mat-tab>

Updated stackblitz

This issue is being caused by the way label is being set for tab.

您正在使用属性标签设置父标签,但是对于子标签,您使用了模板方式来定义它。

<ng-template mat-tab-label>{{tab.label}}</ng-template>

因此,您可以做的是将父选项卡的标签定义为相同,或者也为子选项卡添加标签属性。

这是工作副本 - https://stackblitz.com/edit/mat-tabs-nested-n77qed