【问题标题】:Reusable angular 11 template可重复使用的 Angular 11 模板
【发布时间】:2021-08-03 18:30:24
【问题描述】:

我有 2 个 mat-tabs,每个都有一个表格,具有相同的数据布局,只是不同的数据源。

<mat-tab-group>
  <mat-tab label="table 1">        
    <table mat-table [dataSource]="dataSource1">       <-- one data source
      <ng-container matColumnDef="col1">
        <th mat-header-cell *matHeaderCellDef></th>
        <td mat-cell *matCellDef="let val"> some Data </td>
      </ng-container>

      <ng-container matColumnDef="col2">
        <th mat-header-cell *matHeaderCellDef></th>
        <td mat-cell *matCellDef="let val"> some Data </td>
      </ng-container>

      <tr mat-header-row *matHeaderRowDef="['col1', 'col2']"></tr>
      <tr mat-row *matRowDef="let row; columns: ['col1', 'col2'];"></tr>
    </table>
  </mat-tab>
  <mat-tab label="table 2">        
    <table mat-table [dataSource]="dataSource2">       <-- another data source
      <ng-container matColumnDef="col1">
        <th mat-header-cell *matHeaderCellDef></th>
        <td mat-cell *matCellDef="let val"> some Data </td>
      </ng-container>

      <ng-container matColumnDef="col2">
        <th mat-header-cell *matHeaderCellDef></th>
        <td mat-cell *matCellDef="let val"> some Data </td>
      </ng-container>

      <tr mat-header-row *matHeaderRowDef="['col1', 'col2']"></tr>
      <tr mat-row *matRowDef="let row; columns: ['col1', 'col2'];"></tr>
    </table>
  </mat-tab>
</mat-tab-group>

如您所见,行和列完全相同,所以我想重用表格模板,如下所示:

<table mat-table [dataSource]="dataSource2">
  <ng-container *ngTemplateOutlet="tableContent"></ng-container>
</table>

...

<ng-template #tableContent>
 <ng-container matColumnDef="col1">
    <th mat-header-cell *matHeaderCellDef></th>
    <td mat-cell *matCellDef="let val"> some Data </td>
  </ng-container>

  <ng-container matColumnDef="col2">
    <th mat-header-cell *matHeaderCellDef></th>
    <td mat-cell *matCellDef="let val"> some Data </td>
  </ng-container>

  <tr mat-header-row *matHeaderRowDef="['col1', 'col2']"></tr>
  <tr mat-row *matRowDef="let row; columns: ['col1', 'col2'];"></tr>
</ng-template>

这样我得到:

错误:缺少页眉、页脚和行的定义;不能 确定应该呈现哪些列。

如何定义模板一次?

【问题讨论】:

    标签: angular angular-material2 angular2-template ng-template ngtemplateoutlet


    【解决方案1】:

    您为什么不创建一个MyTableComponent 并接收您的数据作为输入?

    你最终的 HTML 应该是这样的:

    <mat-tab-group>
      <mat-tab label="table 1">        
        <my-table [data]="dataSource1"></my-table>
      </mat-tab>
      <mat-tab label="table 2">        
        <my-table [data]="dataSource2"></my-table>
      </mat-tab>
    </mat-tab-group>
    

    任一

    如果您坚持使用ngTemplateOutlet 解决方案,如果您在模板中添加表格标签并将数据传递到templateOutlet 中,也许它可以工作(阅读:How to Use NgTemplateOutlet 并搜索Passing data to ngTemplateOutlet

    【讨论】:

    • 我知道我可以创建一个组件,但我更多的是询问模板问题的解决方案。至于在模板中添加表格,这将取决于数据源的变量......所以我可以将数据源作为上下文变量传递,但我想具体了解为什么这种方法不起作用。不过谢谢
    • 也许这是mat-table 的限制。看来您不能将上下文放在ng-template 中。我在其他组件库中也看到了类似的反应。好消息是你有选择:) 谢谢你的分享......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 2012-07-10
    相关资源
    最近更新 更多