【发布时间】:2017-05-06 23:53:54
【问题描述】:
我正在使用管道过滤数据表中三个不同列的数据。
列的名称是category、name、department。
我传递的参数如下:
<table class="table table-striped" [mfData]="listdata | dataFilter : filtername : filterDep : filterCategory">
我有*ngFor循环:
<tr *ngFor="let item of mf.data; let i =index">
<td>
{{i+1}}
</td>
<td>{{ item.name }}</td>
<td>{{item.department}}</td>
<td>{{item.category}}</td>
</tr>
设置查询变量的代码是
<th colspan="2">
Filter by name:
<input class="form-control" [(ngModel)]="filtername" (input)="change()" />
</th>
<th colspan="1">
Filter by Department:
<input class="form-control" [(ngModel)]="filterDep" (input)="change()" />
</th>
<th colspan="1">
Filter by Category:
<input class="form-control" [(ngModel)]="filterCategory" (input)="change()" />
</th>
我有一些category 是null 的数据。
我使用的管道是:
@Pipe({
name: "dataFilter"
})
export class DataFilterPipe implements PipeTransform {
transform(array: any[], query: string, query2: string, query3: string): any {
let notNullCategory = _.reject(array, ['category', null]);
if (query || query2 || query3) {
return _.filter(notNullCategory, row => ((row.name.indexOf(query) > -1) && (row.department.indexOf(query2) > -1) && (row.category.indexOf(query3) > -1)));
}
return array;
}
}
这样,如果用户使用一些name 进行搜索,则只考虑具有category 的非空值的行。
我也想考虑具有空值的行,但我无法这样做。
如果我将管道更改为:
@Pipe({
name: "dataFilter"
})
export class DataFilterPipe implements PipeTransform {
transform(array: any[], query: string, query2: string, query3: string): any {
if (query || query2 || query3) {
return _.filter(array, row => ((row.name.indexOf(query) > -1) && (row.department.indexOf(query2) > -1) && (row.category.indexOf(query3) > -1)));
}
return array;
}
}
我得到错误:
Cannot read property 'indexOf' of null
任何帮助将不胜感激。
【问题讨论】:
-
查询变量好像没有设置
-
设置这个变量的代码在哪里
-
@LiverpoolOwen 我有三个设置查询变量的文本框。我将编辑我的问题。
标签: javascript angular typescript pipe lodash