【发布时间】:2019-07-05 13:17:00
【问题描述】:
我正在尝试重新填充使用 mat-autocomplete 的输入。但是,每当我使用this.optionForm.patchValue({selectedOption: 'my value'}) 发送值时,结果都不会显示在 GUI 中。如果我console.log()我可以清楚地看到设置的值。我不确定这个问题是否与我有时将一个对象设置到字段中而其他时间只设置一个字符串这一事实有关?但我希望能够用结果重新填充输入并适当地显示它。无论我如何尝试,我似乎都无法显示结果。
下面是我的组件,它只包含有问题的输入,我的 Observable 正在为mat-autocomplete 获取结果。这些在第一次使用表单时工作正常。
// component.html
<mat-form-field>
<mat-label>Option Object</mat-label>
<input type="text" matInput formControlName="selectedOption" required
[matAutocomplete]="autoGroup">
<mat-autocomplete #autoGroup="matAutocomplete"
(optionSelected)="updateOptionInfo($event.option.value)"
[displayWith]="displayFn">
<mat-option *ngFor="let result of resultOptions | async" [value]="result">
<span>{{result}}</span>
</mat-option>
</mat-autocomplete>
// component.ts
this.resultOptions = this.optionForm.get('selectedOption').valueChanges
.pipe(
debounceTime(300),
switchMap(value => {
if (value === '') {
this.clearProviderInfo();
return of(null);
}
if (value !== '' && ((typeof value) !== 'object')) {
return this.optionService.fetchAndFilterOptions(value)
.pipe(
catchError((e) => {
console.error(e);
return of([]); // empty list on error
})
);
} else {
return of(null);
}
})
);
任何帮助将不胜感激!
【问题讨论】:
-
stackblitz 将使我们更容易帮助解决此问题
-
在更新
resultOptions后试试这个this.resultOptions = [...this.resultOptions], -
@AbhishekKumar 是一个 Observable,所以 Typescript 抱怨:
Type 'any[]' is not assignable to type 'Observable<any[]>'. Property '_isScalar' is missing in type 'any[]'. -
@AkberIqbal 好主意!我将添加一个堆栈闪电战!
标签: angular angular-material observable angular-reactive-forms mat-autocomplete