我有一個array
來自我的API,我使用Material2#AutoComplete來過濾這個...它工作到目前爲止,但我有麻煩顯示另一個物業而不是綁定值選項。如何在自動完成材料2中使用[displayWith]顯示
我知道我必須使用displayWith
,但它並不像我期待的那樣工作。函數[displayWith]="displayFn.bind(this)">
只是返回我,我怎麼能得到完整的對象,因此返回函數name
。
順便說一句,我仍然希望我的ID綁定在我的FormControl。
一些代碼:
組件:
export class AutocompleteOverviewExample {
stateCtrl: FormControl;
filteredStates: any;
states = [
{
id: 1,
name: 'Alabama'
},
{
id: 2,
name: 'North Dakota'
},
{
id: 3,
name: 'Mississippi'
}
];
constructor() {
this.stateCtrl = new FormControl();
this.filteredStates = this.filterStates('');
}
onKeyUp(event: Event): void {
this.filteredStates = this.filterStates(event.target.value);
}
filterStates(val: string): Observable<any> {
let arr: any[];
console.log(val)
if (val) {
arr = this.states.filter(s => new RegExp(`^${val}`, 'gi').test(s.name));
} else {
arr = this.states;
}
// Simulates request
return Observable.of(arr);
}
displayFn(value) {
// I want to get the full object and display the name
return value;
}
}
模板:
<md-input-container>
<input mdInput placeholder="State" (keyup)="onKeyUp($event)" [mdAutocomplete]="auto" [formControl]="stateCtrl">
</md-input-container>
<md-autocomplete #auto="mdAutocomplete" [displayWith]="displayFn.bind(this)">
<md-option *ngFor="let state of filteredStates | async" [value]="state.id">
{{ state.name }}
</md-option>
</md-autocomplete>
基本上,這是幾乎一樣this question(不幸的是,兩個答案都不正確或拋出錯誤)。
這是PLUNKER。
感謝您的回答。那麼,正如我在問題中指定的那樣*「順便說一句,我仍然希望將id綁定在我的FormControl中。」*,** 1st **選項不是我想要的...我不想綁定完整的'對象'(因爲後端需要'id')以我的形式發送。關於第二種方法:它不填充想要我也試圖實現......在plunker我使用'國家'硬編碼這種方式只用於演示的目的...在我的應用程序中,我有10個自動完成所有他們是'Observable',我沒有訂閱他們(我不想),所以我沒有那種價值。 –
@ dev_054有些比我想象的複雜。根據你的意見,也許第一個選項在這裏更合適,你可以簡單地檢索'satet.id'。 :-) – Pengyy
嗯,這裏的問題是'[displayWith]'幾乎不靈活...我必須選擇2種方法之一(都是解決方法)...無論如何謝謝。 –