angular5反应形式未调用异步验证器

时间:2018-03-23 12:20:57

标签: validation asynchronous reactive-forms

我已经使我的自定义验证器运行良好,现在我添加了异步验证,但似乎没有调用。我的验证器做的第一步(仅用于测试)是它记录了一些东西但从未记录它。如果我把我的异步验证器放到同步验证器的数组,它可以工作,但当我将它移动到异步数组时,它不起作用。 形式定义:

 form = new FormGroup({
email: new FormControl('',[
  Validators.required
],[
  MemberValidators.isEmailUnique
]),
firstName: new FormControl('',[
  Validators.required,
  MemberValidators.cannotContainSpace
]),. . . . .

和异步验证器

   static isEmailUnique(c: AbstractControl): Promise<ValidationErrors> | null{
    console.log('isEmail unique');
    let users=['adam','jarda'];
    let email=c.value;
    return new Promise((resolve,reject) =>{
        setTimeout(() =>{
        if (users.indexOf(email)>0){
            resolve({isEmailUnique: true});
            console.log('Email not unique');
        }
        else 
            resolve(null);
        },1000);
        });
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我用FormBuilder重建它并且工作正常。问题可能在语法中的某处。

this.form=fb.group({
  firstName: ['', Validators.minLength(2)],
  lastName: ['', Validators.minLength(2)],
  email: ['', [Validators.email, Validators.required],[MemberValidators.isEmailUnique]],
  notified: ['', Validators.required],
  locale: ['',],
  password: ['', Validators.required, Validators.minLength(8)],
  passwordConfirm: ['', Validators.required],
},{validator:[ MemberValidators.passwordNotMatches]}