如何通过组件传递CDK列和行定义

时间:2019-04-12 04:51:12

标签: angular angular-cdk

我正在尝试通过组件传递列和行的定义,但不确定如何执行,甚至不确定。我想这样做,因此(a)客户端组件可以指定数据,列和行的定义,包装组件可以呈现cdk表以及其他分页装饰。

<app-wrapper-table [data]="data">

  <ng-container cdkColumnDef="firstName">
    <th cdk-header-cell *cdkHeaderCellDef>First Name</th>
    <td cdk-cell *cdkCellDef="let item">{{item.firstName}}</td>
  </ng-container>

  <ng-container cdkColumnDef="lastName">
    <th appHeaderCell *cdkHeaderCellDef>Last Name</th>
    <td cdk-cell *cdkCellDef="let item">{{item.lastName}}></td>
  </ng-container>

  <ng-container cdkColumnDef="availability">
    <th appHeaderCell *cdkHeaderCellDef>Availability</th>
    <td cdk-cell *cdkCellDef="let item">{{item.availability}}></td>
  </ng-container>

  <tr cdk-header-row *cdkHeaderRowDef="displayedColumns"></tr>
  <tr cdk-row *cdkRowDef="let row; columns: displayedColumns"></tr>

</app-wrapper-table>

包装器表如下:

import { Component, OnInit, Input, TemplateRef, ContentChild, AfterViewInit } from '@angular/core';

@Component({
  selector: 'app-my-wrapper-table',
  templateUrl: './my-wrapper-table.component.html',
  styleUrls: ['./my-wrapper-table.component.scss']
})
export class MyWrapperTableComponent implements {
  @Input() data: any[];
  @ContentChild(TemplateRef) template: TemplateRef<any>;
}

<div>
  <div>Some Heading</div>
</div>
<table cdk-table [dataSource]="data">
  <ng-container [ngTemplateOutlet]="template"></ng-container>
</table>
<div class="paging-controls">
  <div class="paging-buttons">
    <button type="button">Previous</button>
    <button type="button">Next</button>
  </div>
  <div class="paging-size">
    <span>Page Size</span>
  </div>
</div>

我得到的错误是

  

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

这里是StackBlitz

1 个答案:

答案 0 :(得分:1)

Cdk表在初始化时需要其定义,如果以后尝试通过模板或ng-content提供它们,则没有定义。

为什么不将表定义拉到包装元素的内容中,并将其与包装组件中的ng-content一起使用,例如modified stackblitz