如果两个 input 框绑定了同一个 FormControl,执行操作 2、3、4 时,会发现两个 input 框显示的内容未保持一致:
group.get(‘name’).setValue(‘Lorie’);- 用户点击第一个 input 并接着输入
1;- 用户点击第二个 input 并接着输入
2;- 用户点击第一个 input 并清空内容;
group.get(‘name’).setValue(‘Corey’);
<div [formGroup]="group">
<input formControlName="name" type="text">
<input formControlName="name" type="text">
</div>
const group = new FormGroup({
name: new FormControl()
});
若想要使两个 input 框内容始终保持同步,解决方法有以下几种:
- 方法1:使用
ngModel<input [(ngModel)]="name" type="text"> <input [(ngModel)]="name" type="text"> - 方法2:使用不同的
formControl各自监听valueChanges,互相改变对方的值<div [formGroup]="formGroup"> <input formControlName="name1" type="text"> <input formControlName="name2" type="text"> </div>const control1 = this.formGroup.get('name1'); const control2 = this.formGroup.get('name2'); control1.valueChanges.subscribe(res => { control2.setValue(res); }); control2.valueChanges.subscribe(res => { control1.setValue(res); }); - 方法3(推荐):保留原代码设计思路,仅需监听
valueChanges并使用setValue(VALUE, { eventEmit: false })即可。const control = this.formGroup.get('name'); control.valueChanges.subscribe(res => { control.setValue(res, { emitEvent: false }); });

当两个Angular的input框使用相同的formControlName时,输入不同步。解决方案包括使用ngModel、独立formControlName监听或直接监听input事件并更新值。

1932

被折叠的 条评论
为什么被折叠?



