【发布时间】:2019-11-12 07:20:41
【问题描述】:
每当我从 Material Autocomplete 中选择一个选项时,它都会对服务器进行额外的 HTTP GET 调用。选择下拉选项的预期结果应该只是填充输入。
下拉选项是从服务器动态检索的。
HTML:
<form class="example-form">
<mat-form-field class="example-full-width">
<input type="text" placeholder="search item" aria-label="Item1" matInput [formControl]="searchTerm" [matAutocomplete]="auto1">
<mat-autocomplete #auto1="matAutocomplete" [displayWith]="displayFn">
<mat-option *ngFor="let item of searchResult" [value]="item.Id">
{{ item.Name }}
</mat-option>
</mat-autocomplete>
</mat-form-field>
</form>
TypeScript:
searchTerm : FormControl = new FormControl();
searchResult = [];
constructor(private service: AppService){
this.searchTerm.valueChanges
.debounceTime(400)
.subscribe(data => {
this.service.search_word(data).subscribe(response =>{
this.searchResult = response
})
其他一切正常。唯一的问题是选择自动完成选项时对服务器的意外额外调用。
快速更新:尚未完全解决此问题。但是,我已将其范围缩小到可能是 displayWith 的问题。
【问题讨论】:
-
为什么会出乎意料?它改变了价值不是吗?
-
您已订阅
valueChanges。选择该选项会更改文本字段的值,我错了吗?您可能需要添加.distinctUntilChanged()。 -
我得到:[ts] 属性 'distinctUntilChanged' 在类型 'FormControl' 上不存在。
-
添加
import 'rxjs/add/operators/distinctUntilChanged';。此外,它需要像valueChanges.distinctUntilChanged()一样应用 -
其实这行不通。我得到了和以前一样的功能。
标签: angular angular-material observable