【发布时间】:2020-12-27 14:38:14
【问题描述】:
我想知道以下情况会发生什么:
我有一个带有这些控件的 formGroup:
{
forename: new FormControl()
surname: new FormControl()
}
现在我像这样跟踪控件“姓氏”的变化(只是一个例子):
this.formGroup.get('surname').valueChanges.subscribe(changes => {
if(this.formGroup.get('forename') == 'Max'){
this.formGroup.get('forename').disable();
}
})
最后我正在像这样修补我的表单:
this.formGroup.patchForm({surname: 'Muster', forename: 'Max'});
会禁用“名字”控件吗?因为我不确定它是否会在设置控件“名字”的值之前触发控件“姓氏”的更改。因此,“forename”可能还没有“正确”的值。
我试图更好地理解,当触发确切的 valueChanges 事件时,因为我有时会遇到问题,即未设置值,尽管它们应该设置。
我还想知道是否可以等到每个控件都被修补后再发出更改。
【问题讨论】:
-
在整个表单对象上尝试
valueChanges。如果表单上的任何值发生更改,这将触发,然后您可以使用filter运算符过滤类型。类似this.form.valueChanges.filter(x => x).subscribe(...) -
不知道如何为更大的表格做到这一点。我可以做
this.formGroup.valueChanges.subscribe(changes =>....),这会给我一个包含所有变化的对象,但是我必须将它与现有对象进行比较以确定实际发生了什么变化?我可能有 20 多个控件,所以这似乎不是一个好的解决方案。不知道我应该如何“过滤”它,因为没有像 filter-Function 这样的东西。 -
如果我将更新对象中的道具顺序更改为:
{ forname: 'Max', surname: 'Muster' },那么一切似乎都按预期工作。
标签: angular angular-reactive-forms angular-changedetection