【发布时间】:2019-12-26 11:44:54
【问题描述】:
我需要根据下拉选择过滤垫表数据。因此,我添加了一个自定义过滤器,但过滤无法正常工作,因为我在 mat-select 下拉列表中使用多个选项我在数组中获取值,但不确定如何过滤这些值。谁能帮帮我。
<mat-form-field class="view-filter">
<mat-select placeholder="Sub Value" [FormControl]="subValueFormControl" multiple>
<mat-option *ngFor="let subVal of subValueOptions" [value]="subVal">
{{subVal}}
</mat-option>
</mat-select>
</mat-form-field>
从 http 服务分配数据源。
filterValues = {
SubValue: "",
Horizontal: "",
ID: ""
};
this.dataSource.data = [{
SubValue: "AA",
Horizontal: "In-1",
ID: "1"
},
{
SubValue: "BB",
Horizontal: "In-2",
ID: "2"
},
{
SubValue: "CC",
Horizontal: "In-2",
ID: "2"
},
{
SubValue: "DD",
Horizontal: "In-1",
ID: "1"
}];
ngOnInit(){
if (this.dataSource) {
this.subValueFormControl.valueChanges.subscribe(SubValue => {
this.filterValues.SubValue = SubValue;
this.dataSource.filter = JSON.stringify(this.filterValues);
});
this.horizontalFormControl.valueChanges.subscribe(Horizontal => {
this.filterValues.Horizontal = Horizontal;
this.dataSource.filter = JSON.stringify(this.filterValues);
});
this.idFormControl.valueChanges.subscribe(ID => {
this.filterValues.ID = ID;
this.dataSource.filter = JSON.stringify(this.filterValues);
});
this.dataSource.filterPredicate = this.tableFilter();
}
}
尝试将值也更改为 toLowerCase 但仍然 filter 不是 wokring 。这里 searchTerms 的值是这样的,以防单下拉选择
searchTerms = {
SubValue: ["AA"],
Horizontal: ["In-1"],
ID:["1"]
}
当在下拉列表中进行多项选择时
searchTerms = {
SubValue: ["AA","BB"],
Horizontal: ["In-1","In-2"],
ID:["1"]
}
public tableFilter() {
const filterFunction = function (data, filter): boolean {
const searchTerms = JSON.parse(filter);
return (
data.SubValue.indexOf(searchTerms.SubValue) !== -1 ||
data.Horizontal.indexOf(searchTerms.Horizontal) !== -1 ||
data.ID.indexOf(searchTerms.ID) !== -1
);
};
return filterFunction;
}
如何根据这些多个下拉选择过滤数据?请帮帮我。
堆栈闪电战:https://stackblitz.com/edit/angular-xhacoa?file=src%2Fapp%2Fapp.component.ts
【问题讨论】:
-
如果您可以创建一个相同的工作堆栈闪电战,会更容易提供帮助。
-
请找到链接:stackblitz.com/edit/…