angular - 如何通过某些语句(例如通过输入值)投影组件的内容
问题描述
我正在处理实现自定义表并遇到问题。
我无法在表格组件中正确投影列组件内容。
table.component.ts:
@Component({ selector: 'app-table', template: ` <table> ... <tbody> <tr *ngFor="let row of rows; let i = index"> <td *ngFor="let column of columns"> <ng-container *ngIf="column.key">{{ getCellValue(column.key, row.value) }}</ng-container> <ng-container *ngIf="!column.key"> <ng-content select="app-column"></ng-content> <!-- [1] this one show content just in last cell --> <ng-container *ngTemplateOutlet="column.contentTemplateRef;"></ng-container> <!-- [2] the same as line above, but another column wrapped in ng-template --> </ng-container> </td> </tr> </tbody> ... </table> `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }) export class TableComponent implements AfterViewInit, OnDestroy { rows: any[]; @ContentChildren(forwardRef(() => TableColumnComponent)) columns: QueryList<TableColumnComponent>; getCellValue(key: string, row: any): any { return key.split('.').reduce((a, b) => a[b], row); } }
column.component.ts:
@Component({ selector: 'app-column', template: `<ng-content></ng-content>`, // [1] // template: `<ng-template><ng-content></ng-content></ng-template>`, // [2] encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }) export class TableColumnComponent { @ViewChild(TemplateRef) contentTemplateRef: TemplateRef<any>; // [2] }
我已经添加了在哪种情况下使用哪个模板的注释。
在这个 StackBlitz 示例中,您可以看到它是如何工作的。该按钮仅在最后一列的最后一个单元格中呈现,但我希望最后一列中的所有单元格都将呈现按钮。
我的问题是如何正确呈现列内容?
解决方案
推荐阅读
- c - 如何更改在 if 条件内的 for 循环内定义的变量的范围以在外部使用它?
- python-3.x - Pyinstaller 说我缺少库
- java - 无法在另一个类中使用 JavaFX 程序的静态方法
- laravel - 如何在不合并 Laravel mix 的情况下编译 JS?
- npm - 在 atom 中安装 linter-eslint 失败
- python - 加载多个模型时,Tensorflow 推理太慢
- java - Spring JPA Native Query Insert ORA-01002: 提取乱序
- excel - 使用 office 脚本从另一个 excel 工作簿中读取数据
- javascript - 找不到 ChakraUI React 导入模块:无法解析“@public/icons”
- django - Django - 托管平台查询