You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular Material可展开行+包裹表格自定义详情无法显示的修复方法

修复方案

步骤1:修正子组件模板的上下文传递

在table-wrapper.component.html的展开行单元格模板中,确保ngTemplateOutletContext正确传递当前行数据,且上下文键名与父组件模板接收的变量匹配:

<ng-container matColumnDef="expandedDetail">
  <td mat-cell *matCellDef="let element" [attr.colspan]="displayedColumns.length">
    <div class="example-element-detail"
         [@detailExpand]="element == expandedElement ? 'expanded' : 'collapsed'">
      <!-- 使用$implicit作为默认上下文键,父组件可直接用let-变量接收 -->
      <ng-container *ngTemplateOutlet="expandedDetailTemplate; context: { $implicit: element }"></ng-container>
    </div>
  </td>
</ng-container>

步骤2:父组件正确接收上下文数据

在app.component.html的自定义详情模板中,通过let-变量名接收子组件传递的行数据:

<app-table-wrapper [dataSource]="dataSource" [displayedColumns]="displayedColumns">
  <!-- let-data接收子组件传递的当前行数据 -->
  <ng-template #expandedDetailTemplate let-data>
    <div class="p-4">
      <h3>自定义详情内容</h3>
      <p>ID: {{data.id}}</p>
      <p>名称: {{data.name}}</p>
      <p>进度: {{data.progress}}%</p>
    </div>
  </ng-template>
</app-table-wrapper>

步骤3:确保子组件正确获取模板引用

在table-wrapper.component.ts中,通过@ContentChild准确获取父组件传递的模板:

import { Component, Input, ContentChild, TemplateRef } from '@angular/core';
import { MatTableDataSource } from '@angular/material/table';

@Component({
  selector: 'app-table-wrapper',
  templateUrl: './table-wrapper.component.html',
  styleUrls: ['./table-wrapper.component.css']
})
export class TableWrapperComponent {
  @Input() dataSource!: MatTableDataSource<any>;
  @Input() displayedColumns!: string[];
  expandedElement: any | null;
  // 获取父组件传入的详情模板
  @ContentChild('expandedDetailTemplate') expandedDetailTemplate!: TemplateRef<any>;
}

关键说明

  • 若使用自定义键名传递上下文(比如context: { row: element }),父组件需对应使用let-row="row"接收数据;使用$implicit可简化为直接let-变量名。
  • 必须保证子组件通过@ContentChild成功获取到父组件的模板引用,否则ngTemplateOutlet无法找到要渲染的内容。

内容的提问来源于stack exchange,提问作者Reginna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 21:12:35