Angular 7 无法为 mat-select 表单控件设置值
Angular 7 can't set value for mat-select form control
我有这个表单组和几个表单控件:
myForm: FormGroup = new FormGroup({
...
myControl: new FormControl(),
...
});
表单控件myControl
是这样的:
<mat-form-field class="col-large">
<mat-select formControlName="myControl">
<mat-option *ngFor="let data of dataMap" [value]="data.value">
{{data.description}}
</mat-option>
</mat-select>
</mat-form-field>
dataMap
基本上是一个对象数组,有一个 属性 值和一个 属性 描述,它们都是字符串,所以对象的一个例子是:
{
"value":"1",
"description":"desc"
}
然后我有一个自动完成输入,在相同的 dataMap
上工作,每当用户开始输入时,它都会搜索数组的描述,仅提示与所写文本匹配的那些。然后,当用户 select 选择一个选项时,它会调用一个方法,从数组中检索相应的值并设置为 myControl
检索到的值。预期的行为是,当自动完成中的一个选项被 select 编辑时,该值在 myControl
中更改并显示新的描述。
问题是 myControl
的值设置正确,但没有显示 selected 选项。
我不明白的是,在 ngOnInit 方法中,我通过这种方式从地图为 myControl
设置了默认值:
this.myForm.get('myControl').setValue("1");
并且它正确 select 选项并将其显示为 selected。然后,在自动完成 selection 的回调方法中,我做了同样的事情,但它不是 selected。表单控件变为空白。
我已经检查了我从自动完成中获得的值,它存在于 dataMap
中。设置新值后,我还打印了 myControl
的值,它是正确的新值。
改为这样做
let test = {
"value":"1",
"description":"desc"
}
this.myForm.get('myControl').setValue(test);
您应该将相同类型的对象传递给 myControl
我有这个表单组和几个表单控件:
myForm: FormGroup = new FormGroup({
...
myControl: new FormControl(),
...
});
表单控件myControl
是这样的:
<mat-form-field class="col-large">
<mat-select formControlName="myControl">
<mat-option *ngFor="let data of dataMap" [value]="data.value">
{{data.description}}
</mat-option>
</mat-select>
</mat-form-field>
dataMap
基本上是一个对象数组,有一个 属性 值和一个 属性 描述,它们都是字符串,所以对象的一个例子是:
{
"value":"1",
"description":"desc"
}
然后我有一个自动完成输入,在相同的 dataMap
上工作,每当用户开始输入时,它都会搜索数组的描述,仅提示与所写文本匹配的那些。然后,当用户 select 选择一个选项时,它会调用一个方法,从数组中检索相应的值并设置为 myControl
检索到的值。预期的行为是,当自动完成中的一个选项被 select 编辑时,该值在 myControl
中更改并显示新的描述。
问题是 myControl
的值设置正确,但没有显示 selected 选项。
我不明白的是,在 ngOnInit 方法中,我通过这种方式从地图为 myControl
设置了默认值:
this.myForm.get('myControl').setValue("1");
并且它正确 select 选项并将其显示为 selected。然后,在自动完成 selection 的回调方法中,我做了同样的事情,但它不是 selected。表单控件变为空白。
我已经检查了我从自动完成中获得的值,它存在于 dataMap
中。设置新值后,我还打印了 myControl
的值,它是正确的新值。
改为这样做
let test = {
"value":"1",
"description":"desc"
}
this.myForm.get('myControl').setValue(test);
您应该将相同类型的对象传递给 myControl