【发布时间】:2017-08-02 10:26:06
【问题描述】:
我正在尝试在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 调用的响应。
演示 plunker 具有不同的 api 调用但类似的响应和设置。 plunker
感谢您的帮助。
【问题讨论】:
-
Plunker 对诊断和解决问题非常有帮助:)
-
http调用在本地环境中。它在 plunker 中不起作用,因为它需要https。 -
@BhavikPatel 您可以创建一个模拟 json 文件并引发 http 调用。使用来自 post 的这个演示插件
-
好的,谢谢,我试试
-
添加了一个插件。谢谢
标签: angular angular-material2 md-autocomplete