gpt4 book ai didi

angular - 是否可以在不触发响应式表单控件上的 valueChanges 的情况下触发 statusChanges?

转载 作者:行者123 更新时间:2023-12-04 12:17:17 58 4
gpt4 key购买 nike

我有一个 FormGroup具有多个嵌套组和控件。其中大部分包含验证器,例如 Validators.required .每当用户单击提交按钮时,我都会递归地遍历表单以确保触发每个验证器并且每个控件都有效。这是通过将每个控件标记为已触摸并调用 control.updateValueAndValidity() 来完成的。 .

但是,这会触发 valueChangedstatusChanged事件。我已将订阅者添加到 statusChanged应该处理任何错误但我不想触发的事件 valueChanged因为值没有改变。

是否可以手动触发 statusChanged不点火 valueChanged ?路过{ emitEvent: false }updateValueAndValidity将阻止这两个事件被触发。

public ngOnInit(): void {
const form = this.formBuilder.group({
'name': ['', Validators.required],
'address': this.formBuilder.group({
'street': ['', Validators.required],
'number': ['', Validators.required]
})
});

form.valueChanges.subscribe(() => console.log('Should not fire'));
form.statusChanges.subscribe(() => console.log('Should fire'));

this.validateForm(form);

console.log(form.valid);
}

private validateForm(control: AbstractControl): void {
if (control instanceof FormControl) {
control.markAsTouched();
control.markAsDirty();
control.updateValueAndValidity();
} else if (control instanceof FormGroup) {
Object.keys(control.controls).forEach(field => {
this.validateForm(control.get(field));
});
}
}

// should print 'Should fire' and 'false' but not 'Should not fire'

最佳答案

statusChanges 属性实际上是一个 EventEmitter,因此您可以将其转换为手动发出状态:

(<EventEmitter<any>> control.statusChanges).emit(control.status);

关于angular - 是否可以在不触发响应式表单控件上的 valueChanges 的情况下触发 statusChanges?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56832561/

58 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com