Angular 4 验证器设置错误“errors:{__zone_symbol__state:null,__zone_symbol__value:Array(0)}”

问题描述 投票:0回答:4

Mobile mobileNumberValidator 返回正常,但其他两个验证器在出现错误时返回 null 承诺。无法识别我在这里犯的错误。请帮忙。 这两个验证器在 formbuilder 对象中设置错误,如下所示

错误 : {__zone_symbol__state:空,__zone_symbol__value:数组(0)}

在表单构建器组中

 this.empInfoForm = this.fb.group({
      'Mobile': [null, [Validators.required], [this.mobileNumberValidator.bind(this)]],
      'Private': [null,  [this.privateNumberValidator.bind(this)]],
      'Work': [null, [this.workNumberValidator.bind(this)]],  
    });

验证器方法

  mobileNumberValidator(control: AbstractControl) {

        return new Promise(resolve => {
          setTimeout(() => {
            if (!this.isMobileNumberValid) {
              resolve({
                'phoneNumber': true

              })
            console.log(this.empInfoForm)
            } else {
              resolve(null);
            }
          }, 10);
        })
      }
        workNumberValidator(control: AbstractControl) {

        return new Promise(resolve => {
          setTimeout(() => {
            if (!this.isWorkNumberValid) {
              resolve({
                'phoneNumber': true

              })
               console.log(this.empInfoForm)
            } else {
              resolve(null);
            }
          }, 10);
        })
      }
        privateNumberValidator(control: AbstractControl) {

        return new Promise(resolve => {
          setTimeout(() => {
            if (!this.isPrivateNumberValid) {
              resolve({
                'phoneNumber': true

              })

                  console.log(this.empInfoForm)
            } else {
              resolve(null);
            }
          }, 10);
        })
      }
angular validation typescript asynchronous promise
4个回答
1
投票

我发现我在这里犯了错误。自定义验证器绑定应该是此处的第三个参数。

this.empInfoForm = this.fb.group({
      'Mobile': [null, [Validators.required], [this.mobileNumberValidator.bind(this)]],
      'Private': [null,null,[this.privateNumberValidator.bind(this)]],
      'Work': [null,null,[this.workNumberValidator.bind(this)]],  
    });

0
投票
In IONIC

if you facing issue in IONIC

error :- __zone_symbol__state: null, __zone_symbol__value: Array(0)


======================== Sol




// use platform ready function, its must

 this.platform.ready().then(() => {

        // use promise like syntax not like this.appVersion.getVersionNumber()
       
     this.appVersion.getVersionNumber().then((data) => {
            
            })

})

0
投票

如果将 AsyncValidator 绑定到

validators
字段而不是表单控件的
asyncValidators
字段,则会出现此错误


-1
投票

如果你使用 Promise,你的回调中应该有 2 个参数:

return new Promise((resolve, reject) => { ...});

当你想将错误设置为true时,你需要拒绝promise:

if (!this.isMobileNumberValid) {
  resolve({'phoneNumber': true});
  console.log(this.empInfoForm)
} else { reject(null); }
© www.soinside.com 2019 - 2024. All rights reserved.