角度6-在FormGroup

时间:2018-11-22 23:48:56

标签: angular

我是Angular的新手,我想知道我们是否可以获取所有已更改的值,并且仅获取那些值。

例如,

this.form = this.formBuilder.group({
  name: '',
  age: '',
  city: ''
});

在我的html模板中,我希望有3个输入,对于我的表单的每个formcontrol都有一个。我还希望有一个按钮,当我单击它时,所产生的操作应该只将更改后的值(PATCH方法)发送到我的后端。

我不知道我们该怎么做。我尝试使用可观察到的“ valueChanges”,但它会返回整个表单,我看不出它如何对我有所帮助。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

因此,这是我已经使用了一段时间的变通方法,并且可以正常工作。

假设您有SELECT ISNULL(Sales.PRODUCT,Purchase.PRODUCT) AS Product ,ISNULL(Sales.ORDER_DATE ,Purchase.ORDER_DATE ) AS OrderDate ,Sales.ORDER_PRICE AS SalesPrice ,Purchase.ORDER_PRICE AS PurchasePrice FROM (SELECT * FROM Tbl AS T WHERE ORDER_TYPE='Sales Order') AS Sales FULL OUTER JOIN (SELECT * FROM Tbl AS T WHERE ORDER_TYPE='Purchase Order') AS Purchase ON Sales.PRODUCT=Purchase.PRODUCT AND Sales.ORDER_DATE=Purcahse.ORDER_DATE 类型的form,并且表单各部分的初始值都存储在FormBuilder obj中。例如,我们的表单只有一个用户名和一封电子邮件。

info中,我们订阅任何更改:

ngOnInit

然后我们实现该方法:

this.form.valueChanges.subscribe(dt => this.fieldChanges());

根据此代码,如果有任何更改,则fieldChanges() { this.anyChanges = false; let username = this.form.controls['username'] && this.form.controls['username'].value || ''; let email = this.form.controls['email'] && this.form.controls['email'].value || ''; if (this.info['username'] !== username.trim() || this.info['email'] !== email.trim()) { this.anyChanges = true; } } 属性将设置为anyChange。如果分开条件,则可以访问单个表单控制元素的所有更改。但是,如果您只关心是否有任何更改,则可以使用true使用上面代码的较短版本,然后将能够以更通用和更好的方式检测到更改。或者,如果您希望存储已更改的字段,则可以定义一个对象,然后在Object.keys(info).forEach(...)部分中,将更改后的字段的键和值添加到该对象。最后,根据需要,您将获得一个对象,其中包含已更改字段及其旧/新值。