【发布时间】:2017-10-19 19:31:42
【问题描述】:
我制作了一个简单的组件来创建表格:
@Component({
selector: 'admin-table',
template: `
<table class='table table-bordered'>
<thead>
<th *ngFor='let column of columns'>
{{ column.label }}
</th>
</thead>
<tbody>
<tr *ngFor="let record of records">
<td *ngFor='let column of columns' [innerHTML]="fieldContent(column, record) | safeHtml">
</td>
</tr>
</tbody>
</table>
`,
})
export class AdminTableComponent {
@Input() columns: AdminTableColumn[];
@Input() records: {}[];
fieldContent(column: AdminTableColumn, record: {}) {
if (column.template) {
//TODO: parse the template and pass current record as argument
return column.template;
}
return record[column.field];
}
}
和其他组件使用上述组件创建产品表
@Component({
selector: 'product-admin',
template: `
<h1>Products</h1>
<admin-table [columns]="columns" [records]="products"></admin-table>
`,
providers: [ProductService],
})
export class ProductAdminComponent implements OnInit {
products: Product[];
columns: AdminTableColumn[] = [
{
field: 'id',
label: 'SKU',
},
{
field: 'name',
label: 'Name',
template: '<strong>{{record.name}}</strong>',
}
];
}
如您所见,AdminTableColumn 有一个名为template 的附加选项,用于使用模板设置单元格的值。但是当尝试渲染我得到的值 {{record.name}} 而不是真实的产品名称时,我不能这样做。
我需要解析在template 选项中输入的值,以允许使用诸如{{record.name}} 或<some-component [title]="record.name"></some-component> 之类的角度声明,以创建丰富的表格。
换句话说,存在类似render(template, { record: record })
【问题讨论】:
-
您也许可以使用
[innerHTML]属性绑定。值得一试stackoverflow.com/questions/34936027/… -
目前我正在使用
[innerHTML],请参见[innerHTML]="fieldContent(column, record) | safeHtml"行,但内容按原样(原始)呈现,但我需要传递一些变量,例如record。 -
尝试注入
ChangeDetectorRef,然后调用detectChanges()。或者另一种方法似乎是注入NgZone然后执行run()。 -
我不确定如何以及在何处使用
ChangeDetectorRef或NgZone。我是 Angular 的初学者,这是我的第一个项目,你能举个例子吗?谢谢