我正在使用具有各种需要验证的字段的反应式表单。某些字段具有条件验证,只有在满足条件时才应检查。(即如果您对上述问题的回答是肯定的,请解释原因)
在最终看起来像这样的 HTML 中:
<input type="text" [required]="did_you_answer_yes_to_the_previous_question" />
这样,除非满足条件,否则反应式表单不会验证该字段。
然后我检查 valueChanges 上的表单有效性,如下所示:
this.form.valueChanges
.pipe(
concatMap((updatedForm: any) => {
if (this.form.dirty) {
this.service.udpateFormIsValid(this.form.valid);
this.form.markAsPristine();
}
return of(updatedForm);
})
)
.subscribe((updatedForm: any) => { });
但是,验证发生在角度绑定更新导致误报和否定之前。
.debounceTime(250)
我可以通过在 observable 之后添加 a 来缓解竞争条件来轻松修复它valueChanges
,但是添加手动延迟似乎是一种反模式。
有没有更好的方法来确保我们每次更新表单时都执行检查,但在 angular 更新布尔条件绑定之后执行检查?