我在table1中有一个过滤器下拉列表,它通过table2条目出现。在表2中,如果我有" Car" 2次,den在过滤器下降也显示2次Car,Car。我如何让它只来一次。请帮忙
HTML代码:
<div class="queryBox col-lg-2 col-md-2 col-sm-2 col-xs-3 taskDiv">
<label>Vehice</label>
<ng-select [options]="Vehice" [(ngModel)]="filter.vehice" class='filterDropDown' placeholder="All" [allowClear]="true">
</ng-select>
</div>
Ts代码:
this.ApiService
.getVehice ()
.subscribe(
vehicle => {
this.Vehice = vehice.map(function(item) {
if(item.vehicle ) {
return {"value":item.vehice,"label":item.vehice};
}
})
答案 0 :(得分:0)
我不确定是否会使用Pipe来过滤独特的结果。我可能会做这样的事情:
let elements = [{'name' : 'Apple', 'type' : 1},
{'name' : 'Apple', 'type' : 1},
{'name' : 'Pear', 'type' : 4}];
function filterUniqueResults(list: any[]): any[]{
let uniqueList = [];
elements.forEach(element => {
if(uniqueList.indexOf(element) === -1){
uniqueList.push(element);
}
});
return uniqueList;
}
let result = filterUniqueResults(elements);
这不就是你要求的吗?
从您发布的代码中,您似乎要求其他内容,即“如何根据属性过滤某些值?”你可以用这样的管道来做:
import { Pipe, PipeTransform, Injectable } from '@angular/core';
@Pipe({
name: 'exclude'
})
@Injectable()
export class FilterPipe implements PipeTransform {
transform(items: any[], field: string, value: string): any[] {
if (!items) return [];
return items.filter(it => it[field] != value);
}
}
然后
<li *ngFor="let item of items | exclude : 'type' : 4">{{item.name}}</li>
或
<li *ngFor="let item of items | exclude : 'name' : 'apple'">{{item.name}}</li>
修改强> 所以回答你的评论:
this.apiService.getVehicles().subscribe(
result => this.vehicles = filterUniqueResults(result));
鉴于你的apiService看起来像这样:
public getVehicles(): Observable<Vehicle[]> {
return this.http.get("http://whatever")
.map(res => res.json().data || {})
.catch(error => console.error(error));
}
答案 1 :(得分:0)
var valArray: any = [];
function functionName(id){
var idx = this.valArray.indexOf(id);
if (idx > -1) {
this.valArray.splice(idx, 1);
}
else {
this.valArray.push(id);
}
}
In valArray array you will get the unique records.