我为特定字段编写了一个异步验证器,另一个为该字段的两个字段:
this.aliasCtrl = formBuilder.control('', [], [
(control: AbstractControl) => {
return new Promise(resolve => {
if(control.value === 'aaa') {
resolve({error: true});
} else {
resolve(null);
}
});
}
]);
this.formGroup = formBuilder.group({
firstName: formBuilder.control('', []),
lastName: formBuilder.control('', []),
alias: this.aliasCtrl
}, {
asyncValidator: (group: FormGroup) => {
return new Promise(resolve => {
if(group.value.firstName === 'aaa' && group.value.lastName === 'aaa') {
resolve({error2: true});
} else {
resolve(null);
}
});
}
});
他们两个都正常工作。关键是,当别名控制验证器抛出错误时(当字段包含aaa
时),“全局”调查器永远不会。
我的问题的一个问题:http://plnkr.co/edit/vyr48ke7fWEUwrXy43tn?p=preview
如何重现:
aaa
放在从第一个字段开始的所有字段中。好的,一切正常。aaa
放在从最后一个开始的所有字段中。在编辑firstName
字段的lastName
时,系统不会调用“全局”验证程序(我在plunker中添加了一些console.log
来监视调用验证程序的时间)。这种行为是故意的吗?为什么?如果错误已经存在,如何调用“全局”验证器事件?
答案 0 :(得分:1)
回答我的问题的一种方法是定义包含字段formGroup
和firstName
的{{1}}。这是解决方案的一名成员:http://plnkr.co/edit/HAmaYySbxVE15VOl9uJ4?p=preview
供参考,我在这里lastName
:
formGroup