Angular 2 - 带有微服务的反应式表单异步验证
Angular 2 - Reactive Form Asynchronous Validation w/ Microservice
一直在考虑为表单实施异步 custom validator,其唯一目的是与微服务通信以从个人 ID 号码中提取信息(如年龄、出生日期、性别、种族等) ) 当然还有身份证号码是否有效取决于他们发送的国家/地区。
因此,如果一个人输入他们的身份证号码并选择一个国家,就会向微服务发出一个请求,如果他们没有设置他们的性别,例如,它会自动填充它,他们可以将其更改为之后如果需要的话。
问题
- 根据以下场景在验证器中设置其他表单控件值是否good/OK实践?
- 如果是这样,我将如何修改其他表单控件值?
任何帮助将不胜感激:)
正如我在评论中所说,验证器永远不应该设置或更新表单控件、组或数组的值。它应该只验证。
然而你可以做的是使用 .valueChanges
来监听表单的变化,并在回调中检查某个控件是否有效,相应地更新一些其他控件。
这是一个例子:
this.form.get('someControl').valueChanges(() => {
if (this.form.get('someControl').valid) {
this.form.get('someOtherControl').setValue(true);
}
});
一直在考虑为表单实施异步 custom validator,其唯一目的是与微服务通信以从个人 ID 号码中提取信息(如年龄、出生日期、性别、种族等) ) 当然还有身份证号码是否有效取决于他们发送的国家/地区。
因此,如果一个人输入他们的身份证号码并选择一个国家,就会向微服务发出一个请求,如果他们没有设置他们的性别,例如,它会自动填充它,他们可以将其更改为之后如果需要的话。
问题
- 根据以下场景在验证器中设置其他表单控件值是否good/OK实践?
- 如果是这样,我将如何修改其他表单控件值?
任何帮助将不胜感激:)
正如我在评论中所说,验证器永远不应该设置或更新表单控件、组或数组的值。它应该只验证。
然而你可以做的是使用 .valueChanges
来监听表单的变化,并在回调中检查某个控件是否有效,相应地更新一些其他控件。
这是一个例子:
this.form.get('someControl').valueChanges(() => {
if (this.form.get('someControl').valid) {
this.form.get('someOtherControl').setValue(true);
}
});