javascript – Angular中的反应形式:双向绑定

我对Reactive表单有疑问.用户更改输入时更新模型类是直截了当的.但我需要采取相反的方式:以编程方式更改模型,并查看HTML表单中的更改.

简化的代码是:

this.user = new User();

然后:

this.form = this.fb.group({
      name: new FormControl(this.user.name, [Validators.required]),
      email: new FormControl(this.user.email, [Validators.required])    
    });

假设它工作正常.如果用户在GUI中更新名称,则正确更新this.user.name.

假设我已经向User类添加了一些逻辑,它根据输入的名称填充电子邮件.每次更改名称时,电子邮件字段都会自动生成为’name’@gmail.com

遗憾的是,生成的电子邮件在GUI中不可见.怎么实现呢?

如何通知FormGroup有关User类的更改?

我有两个想法:

1)添加([ngModel]) – 它有效 – 但我觉得将Reactive Forms与ngModel混合是一个坏主意

2)在创建表单后添加以下代码

this.form.controls["name"].valueChanges.distinctUntilChanged().subscribe(form => {
    this.form.patchValue({email: this.model.email});
});

但它看起来并不干净.还有其他选择吗?

解决方法:

这不仅仅是反应形式的工作方式.

对于反应形式,表单不会绑定到您的模型,它有自己的模型,如果您查看“form.value”,您可以看到它.

在创建表单控件时传递给它的值没有绑定,它只是用作表单控件的初始值.

目的是用户填写表单,动态发生验证(即被动部分),然后当他们提交表单时,您将表单的值一次性转移到模型中.

也就是说,如果要更新表单控件的值,patchValue确实是正确的方法.

相关文章

ANGULAR.JS:NG-SELECTANDNG-OPTIONSPS:其实看英文文档比看中...
AngularJS中使用Chart.js制折线图与饼图实例  Chart.js 是...
IE浏览器兼容性后续前言 继续尝试解决IE浏览器兼容性问题,...
Angular实现下拉菜单多选写这篇文章时,引用文章地址如下:h...
在AngularJS应用中集成科大讯飞语音输入功能前言 根据项目...
Angular数据更新不及时问题探讨前言 在修复控制角标正确变...