gpt4 book ai didi

angular - 如何将内容投影到 mat-table 列

转载 作者:太空狗 更新时间:2023-10-29 17:25:58 24 4
gpt4 key购买 nike

Link to stackblitz

我有带 Angular Material 表的通用组件(结构完全相同)。所以我想使用 ng-content 并更改一些列:

@Component({
selector: 'table-basic-example',
styleUrls: ['table-basic-example.css'],
templateUrl: 'table-basic-example.html',
})
export class TableBasicExample {
displayedColumns = ['test', 'name'];
dataSource = new MatTableDataSource<Element>(ELEMENT_DATA);
}

const ELEMENT_DATA: { name: string } = [
{name: 'Hydrogen'},
{name: 'Helium'},
{name: 'Lithium'},
{name: 'Beryllium'},
{name: 'Boron'},
];
<div class="example-container mat-elevation-z8">
<mat-table #table [dataSource]="dataSource">

<!-- Position Column -->
<ng-container matColumnDef="test">
<mat-header-cell *matHeaderCellDef>Test</mat-header-cell>
<mat-cell *matCellDef="let element">

<ng-content select="[test]"></ng-content>

</mat-cell>
</ng-container>

<!-- Name Column -->
<ng-container matColumnDef="name">
<mat-header-cell *matHeaderCellDef> Name </mat-header-cell>
<mat-cell *matCellDef="let element"> {{element.name}} </mat-cell>
</ng-container>

<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
</mat-table>
</div>

这就是为什么我想像布局一样使用它并投影一些数据。所以我有另一个组件:

<table-basic-example>

<div test>
test
</div>

</table-basic-example>

但是结果很奇怪。我在最后一行得到了投影。

enter image description here

Link to stackblitz

最佳答案

您应该将 ng-template 与 ngTemplateOutlet 一起使用。以下对我有用。

这就是为什么 ng-content 可能不起作用的原因 angulars-content-projection-trap-and-why-you-should-consider-using-template-outlet-instead

@Component({
selector: 'table-basic-example',
styleUrls: ['table-basic-example.css'],
templateUrl: 'table-basic-example.html',
})
export class TableBasicExample {
@Input() templateRef: TemplateRef<any>;
displayedColumns = ['test', 'name'];
dataSource = new MatTableDataSource<Element>(ELEMENT_DATA);
}

const ELEMENT_DATA: { name: string } = [
{name: 'Hydrogen'},
{name: 'Helium'},
{name: 'Lithium'},
{name: 'Beryllium'},
{name: 'Boron'},
];

<div class="example-container mat-elevation-z8">
<mat-table #table [dataSource]="dataSource">

<!-- Position Column -->
<ng-container matColumnDef="test">
<mat-header-cell *matHeaderCellDef>Test</mat-header-cell>
<mat-cell *matCellDef="let element">

<!-- using ng-template with ngTemplateOutlet instead of ng-content -->
<ng-template [ngTemplateOutlet]="templateRef"></ng-template>

</mat-cell>
</ng-container>

<!-- Name Column -->
<ng-container matColumnDef="name">
<mat-header-cell *matHeaderCellDef> Name </mat-header-cell>
<mat-cell *matCellDef="let element"> {{element.name}} </mat-cell>
</ng-container>

<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
</mat-table>
</div>

<table-basic-example>

<div test [templateRef]="columnTemplateRef">
<ng-template #columnTemplateRef>
test
</ng-template>
</div>

</table-basic-example>

关于angular - 如何将内容投影到 mat-table 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47835488/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com