我正在使用Angular 6
和 ngx-datatable 在表中显示数据。
如果以前知道这些列,则过滤器的工作原理类似于
updateFilter(event) {
const val = event.target.value.toLowerCase();
// filter our data
// update the rows
this.rows = this.temp.filter(function (d) {
if (d.user.name.toLowerCase().indexOf(val) !== -1 || !val) {
return d.user.name.toLowerCase().indexOf(val) !== 1 || !val;
} else if (d.user.email.toLowerCase().indexOf(val) !== -1 || !val) {
return d.user.email.toLowerCase().indexOf(val) !== -1 || !val;
}
});
}
但是在我的情况下,列是动态的并且随着数据而变化。
这是我从数据中提取列名的方法
private _processData() {
const columns = Object.keys(this.data.data[0]);
this.columnsList = columns;
for (const c of columns) {
this.columns.push({
prop: c,
name: c.toUpperCase()
});
}
this.rows = this.data.data;
this.temp = this.data.data;
}
现在,我想修改updateFilter()
函数以用于动态列列表 columnsList 。这就是我所做的。
updateFilter(event) {
const val = event.target.value.toLowerCase();
const columns = this.columnsList;
// filter our data
// update the rows
this.rows = this.temp.filter(function (d) {
for (const c of columns) {
if (d[c].toLowerCase().indexOf(val) !== -1 || !val) {
return d[c].toLowerCase.indexOf(val) !== -1 || !val;
}
}
});
}
但是当搜索数据时,它会显示类似错误
ERROR TypeError: "d[c].toLowerCase.indexOf is not a function"
如何使用动态列名来生成updateFilter()
方法以使其有效工作。