使用角度4中的ReactiveForms保持两个FormControl输入元素同步

Jim*_*Jim 5 javascript typescript angular

给定一个组件,带有表单声明

ngOnInit() {
  this.form = this.fb.group({
    address: [""],
  });
}
Run Code Online (Sandbox Code Playgroud)

表单上的两个输入控件,两者都引用相同的控件.

<input type="text" class="form-control" placeholder="Address" formControlName="address">
<input type="text" class="form-control" placeholder="Address" formControlName="address">
Run Code Online (Sandbox Code Playgroud)

如何在每个控件中保持输入值相同.更新每个输入元素确实会更改模型值,但不会更改其他相应的输入值.我确信这是设计的.

我在选项卡式界面上使用控件,每个选项卡上都需要重复.有没有简单的方法来保持更新?

我有一个工作的plunker演示.

Obe*_*bed 17

只需在表单中添加值字段即可

<input type="text" class="form-control" [value]="form.value.address" placeholder="Address" formControlName="address">
<input type="text" class="form-control" [value]="form.value.address" placeholder="Address" formControlName="address">
Run Code Online (Sandbox Code Playgroud)

看看这个plunker

  • 哈哈!谢谢,简直不敢相信,我错过了。 (2认同)

Tit*_*iva 10

如果组件引用了同一个表单,但它们在不同的部分(例如不同的模板),您可以订阅值更改事件来更新值。这对我有用:

class CustomComponent implements OnInit {

 @Input() formGroup: FormGroup;

 ngOnInit() {

 this.formGroup.controls['param'].valueChanges.subscribe(x=> {
       this.formGroup.controls['param'].setValue(x, {onlySelf: true, emitEvent: false});
    });

  }

}   
Run Code Online (Sandbox Code Playgroud)

因此,如果您修改一个组件中的值,订阅将处理另一个组件中的更改。在emitEvent: false防止对在变化的无限循环进入。

  • 我过去曾使用过接受的答案,成功实现了字符串和数字“ui 同步”。然而,这个答案解决了我的“Date”对象的问题(例如[ng-bootstrap](http://ngx-bootstrap-latest.surge.sh/#/datepicker)中的“bsDatePicker”) (2认同)