我有Angular 7项目。我写了<ng-template>
,它正在发送我的rowData
。当我像下面这样写一个ng-template
时,一切工作正常。但是,我需要多个ng-template。我尝试了以下类似的方法。但是,我无法执行。我该如何实现?
app.grid.component.html
<ng-template pTemplate="body" let-rowData>
<tr>
<td *ngFor="let col of Columns" class="ui-resizable-column">
<span>{{rowData[col.field]}}</span>
</td>
<td>
<ng-template *ngTemplateOutlet="templateRef; context : {rowData : rowData}"></ng-template>
</td>
</tr>
</ng-template>
app.grid.component.ts
export class GridComponent implements OnInit {
@ContentChild(TemplateRef) templateRef: TemplateRef<any>;
}
mycomponent.html
<app-grid>
<ng-template let-rowData="rowData">
<button type="button" label="Update" (click)="update(rowData)"
</ng-template>
</app-grid>
app.grid.component.html
<ng-template pTemplate="body" let-rowData>
<tr>
<td *ngFor="let col of Columns" class="ui-resizable-column">
<span>{{rowData[col.field]}}</span>
</td>
<td>
<ng-template *ngTemplateOutlet="templateRef; context : {rowData : rowData}"></ng-template>
</td>
<td>
<ng-template *ngTemplateOutlet="templateRef2; context : {rowData : rowData}"></ng-template>
</td>
</tr>
</ng-template>
app.grid.component.ts
export class GridComponent implements OnInit {
@ContentChild(TemplateRef) templateRef: TemplateRef<any>;
@ContentChild(TemplateRef) templateRef2: TemplateRef<any>;
}
mycomponent.html
<app-grid>
<ng-template let-rowData="rowData" [ngForTemplate]="templateRef">
<button type="button" label="Delete" (click)="delete(rowData)"></button>
</ng-template>
<ng-template let-rowData="rowData" [ngForTemplate]="templateRef2">
<button type="button" label="Update" (click)="update(rowData)"></button>
</ng-template>
</app-grid>
答案 0 :(得分:1)
我找到了答案。您可以从此stackblitz链接中看到。 (此堆叠闪电击并非完全相同。但是逻辑完全相同。)
答案 1 :(得分:0)
您应该使用@ContentChildren
而不是@ContentChild
@ContentChildren(TemplateRef) tabs: QueryList<TemplateRef>;
答案 2 :(得分:0)
Hasan Ozdemir,您可以为此使用@ViewChild
Component.ts
使用
TemplateRef
创建模板,然后在要显示的组件中选择模板变量,
@ViewChild("template1") template1: TemplateRef<any>;
@ViewChild("template2") template2: TemplateRef<any>;
selectedTemplate: TemplateRef<any>;
Component.html
在下面的模板中进行一些更改
<ng-container *ngTemplateOutlet="selectedTemplate; context : {rowData : rowData}"></ng-container>
<app-grid>
<ng-template #template1>
<button type="button" label="Delete" (click)="delete(rowData)"></button>
</ng-template>
<ng-template #template2>
<button type="button" label="Update" (click)="update(rowData)"></button>
</ng-template>
</app-grid>
如果要一次显示多个模板,请使用@ViewChildren而不是@ViewChild
。希望这会使您对ngTemplates
有所了解:)
更新:
您需要将模板设置为要显示的selectedTemplate
。
但是我认为您需要显示多个模板,因此需要对html文件进行一些更改。因此,您可以在组件中删除selectedTemplate
。
<td>
<ng-container *ngTemplateOutlet="template1; context : {rowData : rowData}"></ng-container>
</td>
<td>
<ng-container *ngTemplateOutlet="template2; context : {rowData : rowData}"></ng-container>
</td>