我正在研究自动完成角度材质2的功能。 这是他们网站提供的工作人员:https://plnkr.co/edit/7Q0zVT68CSPz4wGhFbPo?p=preview
他们正在从状态数组中过滤状态。 这是他们的过滤器实现:
filterStates(val: string) {
return val ? this.states.filter(s => new RegExp(`^${val}`, 'gi').test(s))
: this.states;
}
目前他们过滤的是这样一个数组:
states = [
'Alabama',
'Alaska',
'Arizona',
'Arkansas',
'California',
'科罗拉多' }
然而,如果它不是一个简单的数组并且是一个像对象的数组,那该怎么办呢?
states=[{"name":"Alaska",code:1234},
{"name":"Bulgaria",code:12345},
{"name":"Colarado",code:12346},
{"name":"New Jersey",code:12347},
]
到目前为止我所尝试的是:
filterStates(val: string) {
return val ? this.stateFilter(val)
: this.states;
}
statefilteredvalue:string;
statefilter(val):string{
for(var i=0; i< this.states.length;i++){
console.log(this.states[i].name);
this.statefilteredvalue= this.states[i].name.filter(s => new RegExp(`^${val}`, 'gi').test(s))
}
return this.statefilteredvalue;
}
但我没有得到所需的输出。
如何根据上述数组中的name
过滤它?
答案 0 :(得分:2)
您需要对原始过滤器进行的唯一更改是更改它将针对您对象的name属性测试正则表达式,因此您的filterStates
应如下所示:
filterStates(val: string) {
console.log(val)
return val ? this.states.filter(s => new RegExp(`^${val}`, 'gi').test(s.name))
: this.states;
}
更新:您还需要将[value]="state"
更改为[value]="state.name"