【发布时间】:2019-04-05 11:06:42
【问题描述】:
我正在尝试使用复选框构建过滤器。下面是我的代码的 sn-p:
filter.pipe.ts
import { Pipe, PipeTransform, Injectable } from '@angular/core';
@Pipe({
name: 'filter2'
})
@Injectable()
export class FilterPipe implements PipeTransform {
transform(items: any[], field: string, value: string): any[] {
if (!items) {
return [];
}
if (!field || !value) {
return items;
}
var newArray = [];
items.filter(singleItem => {
if (singleItem != null && singleItem[field] != null && singleItem[field] != undefined && singleItem[field].includes(value)) {
newArray.push(singleItem);
}
})
return newArray;
}
}
app.html
<ng-container *ngFor="let group of groups; let i=index">
<label class="btn btn-filter" id="bttns">
<input type="checkbox" name="customersGroupFilter" autoComplete="off" [value]="group" (change)="changeGroup($event)">
{{ group }}
</label>
</ng-container>
.....
<tr *ngFor="let user of usersList | filter2: 'group' : groupValue">
.....
app.ts
groups = ['a', 'b', c']
usersList = [{'name': 'john', 'group': 'a'}, {'name': 'mike', 'group': 'a'}, {'name': 'doe', 'group': 'b'}, {'name': 'tim', 'group': 'c'}]
groupValue
changeGroup(event) {
this.groupValue = event.target.value
}
这很好用,但如果我想进行多次检查,新的复选框值将始终覆盖我以前的值,因此无法进行多次检查。
例如:
如果我检查组 'a' => 它会返回给我 john, mike
如果我检查 'a' 和 'b' => 它只会返回我的 doe
如何修改我的代码以达到我想要的效果?感谢您的宝贵时间!
【问题讨论】:
标签: javascript html angular filter