我是Angular的新手,我想知道我们是否可以获取所有已更改的值,并且仅获取那些值。
例如,
this.form = this.formBuilder.group({
name: '',
age: '',
city: ''
});
在我的html模板中,我希望有3个输入,对于我的表单的每个formcontrol都有一个。我还希望有一个按钮,当我单击它时,所产生的操作应该只将更改后的值(PATCH方法)发送到我的后端。
我不知道我们该怎么做。我尝试使用可观察到的“ valueChanges”,但它会返回整个表单,我看不出它如何对我有所帮助。
有什么想法吗?
谢谢!
答案 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(...)
部分中,将更改后的字段的键和值添加到该对象。最后,根据需要,您将获得一个对象,其中包含已更改字段及其旧/新值。