我正在寻找一种方法将列添加到ngx-datatable“动态”但我无法找到方法。我想要完成的是某种日历。为了简单起见,我想说我想在表格中显示一些对象,例如:
rows: [
{ name: Joe, availableDays: [ { date:'01-01-2017', foo: true }, { date:'03-01-2017', foo: true }]}
{ name: Jack, availableDays: [ { date:'01-04-2017', foo: true }]}
]
现在我想看到以下列和值:
Name; 01-01-2017; 02-01-2017; 03-01-2017; 04-01-2017
Joe; true; false; true; false
Jack; false; false; false; true
忽略'foo'。我刚刚添加它以表明我正在寻找处理对象的东西。 我很乐意在这个例子中使用它:https://github.com/swimlane/ngx-datatable/blob/master/demo/basic/inline.component.ts
语法如下:
<ngx-datatable-column name="Name">
<ng-template ngx-datatable-cell-template let-value="value" let-row="row">
[...]
</ng-template>
</ngx-datatable-column>
谢谢!
答案 0 :(得分:3)
即使这个问题是一年多以前发布的,我也想回答这个问题,因为我认为它将帮助其他试图完成同一任务的人。我正在将Angular6与Typescript一起使用,但是您仍然应该能够将解决方案应用于您的需求。
首先,我在课堂上添加了resultColumns: any[] = [];
声明。在HTML方面,我添加了以下内容:
<ngx-datatable class='material'
[rows]='row'
[columnMode]='"flex"'
[headerHeight]='50'
[footerHeight]='50'
[rowHeight]='"auto"'
[limit]='20'
[messages]='messageObject'
[sortType]='"single"'
[loadingIndicator]='loading'
[scrollbarH]="true">
<ngx-datatable-column *ngFor="let col of resultColumns; let i = index" [name]="col.name" [flexGrow]="col.flexGrow">
<ng-template ngx-datatable-header-template>
{{ col.name }}
</ng-template>
<ng-template let-value="value" ngx-datatable-cell-template>
{{ value }}
</ng-template>
</ngx-datatable-column>
</ngx-datatable>
在ngOnInit中,我正在调用一个名为generateColumns()
的函数,该函数将负责填充resultColumns
对象。
generateColumns(rows) {
this.rows.forEach((item) => {
this.resultColumns.push({
name: item.date,
prop: item.foo,
flexGrow: 1.0,
minWidth: 100
});
}
// Pushes the name column to the front of the column list
this.resultColumns.unshift({
name: 'Name',
prop: item.name,
flexGrow: 1.0,
minWidth: 100
});
}
答案 1 :(得分:1)
假设您从某处获取行:
this.someService.getRows(someParam).subscribe(rows => {
if (rows?.length > 0) {
this.columns = Object.keys(rows[0]);
}
this.rows = rows;
}, (error: MysqlError) => {
this.error = error;
}));
然后在您的模板中:
<ngx-datatable
...
[rows]="rows"
>
<ngx-datatable-column *ngFor="let col of columns" [prop]="col"></ngx-datatable-column>
</ngx-datatable>