Material 2 - 自动完成不显示选项
Material 2 - autocomplete not showing options
我正在尝试在 angular
中实现 material-2
的 md-autocomplete
。它的工作方式是当用户开始输入时,它会调用 http
来获取数据并显示在选项中。
我能够进行 http 调用,但由于某种原因,它不会在 options
中显示。
Html :
<md-input-container>
<input mdInput placeholder="Search drug" [mdAutocomplete]="auto" [formControl]="drug" showPanel="false">
</md-input-container>
<md-autocomplete #auto="mdAutocomplete" [displayWith]="displayFn">
<md-option *ngFor="let drug of filteredDrugs | async" [value]="drug.drugname">
{{ drug.drugname}}
</md-option>
</md-autocomplete>
TS :
export class DialogAutoComplete {
drug: FormControl;
drugList = [];
filteredDrugs: any;
constructor(public dialogRef: MdDialogRef<DialogAutoComplete>, private getData: GetData) {
this.drug = new FormControl();
//this.filteredDrugs =
this.filteredDrugs = this.drug.valueChanges.startWith(null)
.map(drugname => {
return Array.of(this.getDrugs(drugname)) || [{}];
});
}
getDrugs(val: string) {
console.log("filterdrugs is called ", val);
return val ?
// this.drugList.filter(option => option)
this.getData.getDataForAutoComplete(val).subscribe(
(response: Response) => { console.log(response); return response || []; },
(err) => console.log(err)
)
: [{ drugname: "No Such drug found" }];
}
displayFn(drug) {
console.log("displayfn => ", drug);
return drug == null ? drug : drug.drugname;
}
}
下面是 http
调用的响应。
Demo plunker 具有不同的 api 调用但相似的响应和设置。 plunker
感谢帮助。
使 filteredDrugs
成为可观察对象,以您想要的格式从任何服务 (HttpService) 获取数据。
https://blog.bouzekri.net/2016-05-15-angular2-rxjs-simple-paginated-list-with-search-field
您定义的异步 *ngFor="let drug of filteredDrugs | async"
有助于在运行时获取 filterDrugs
的值,因此 filteredDrugs
需要是一个 Observable。
有帮助link:AutoComplete tutorial
我正在尝试在 angular
中实现 material-2
的 md-autocomplete
。它的工作方式是当用户开始输入时,它会调用 http
来获取数据并显示在选项中。
我能够进行 http 调用,但由于某种原因,它不会在 options
中显示。
Html :
<md-input-container>
<input mdInput placeholder="Search drug" [mdAutocomplete]="auto" [formControl]="drug" showPanel="false">
</md-input-container>
<md-autocomplete #auto="mdAutocomplete" [displayWith]="displayFn">
<md-option *ngFor="let drug of filteredDrugs | async" [value]="drug.drugname">
{{ drug.drugname}}
</md-option>
</md-autocomplete>
TS :
export class DialogAutoComplete {
drug: FormControl;
drugList = [];
filteredDrugs: any;
constructor(public dialogRef: MdDialogRef<DialogAutoComplete>, private getData: GetData) {
this.drug = new FormControl();
//this.filteredDrugs =
this.filteredDrugs = this.drug.valueChanges.startWith(null)
.map(drugname => {
return Array.of(this.getDrugs(drugname)) || [{}];
});
}
getDrugs(val: string) {
console.log("filterdrugs is called ", val);
return val ?
// this.drugList.filter(option => option)
this.getData.getDataForAutoComplete(val).subscribe(
(response: Response) => { console.log(response); return response || []; },
(err) => console.log(err)
)
: [{ drugname: "No Such drug found" }];
}
displayFn(drug) {
console.log("displayfn => ", drug);
return drug == null ? drug : drug.drugname;
}
}
下面是 http
调用的响应。
Demo plunker 具有不同的 api 调用但相似的响应和设置。 plunker
感谢帮助。
使 filteredDrugs
成为可观察对象,以您想要的格式从任何服务 (HttpService) 获取数据。
https://blog.bouzekri.net/2016-05-15-angular2-rxjs-simple-paginated-list-with-search-field
您定义的异步 *ngFor="let drug of filteredDrugs | async"
有助于在运行时获取 filterDrugs
的值,因此 filteredDrugs
需要是一个 Observable。
有帮助link:AutoComplete tutorial