用户完成输入时的Angular2控件验证

时间:2017-03-04 10:52:02

标签: javascript angular typescript

我想与服务器进行验证,以检查电子邮件是否已经注册,但仅限于模糊而非价值变化

我可以选择添加多个控件,这就是我组织表单的方式

    ngOninit(){
      this.userForm = this._formBuilder.group({
       others: this._formBuilder.array([])  //multiple
      });

      this.onAddControl();  //allows adding multiple items
    }



    onAddControl(){

        return this._formBuilder.group({
         email: ['' [this._validateServ.emailDoesntExistsValidator.bind(this._validateServ)]
         ],

       });
   }
 }

现在在_validateServ

emailDoesntExistsValidator(control) {
  if (control.value != undefined) {
    if(!this.emailValueValidator(control)){
       return this._authService.checkExists("email",control.value)  //http request
        .map(response => {
          if (response) {
            return {'emailTaken': true};
         }
      });
    }

  }
}

我希望电子邮件验证能够在模糊下运行,因为它正在执行http请求,以便我可以显示正在执行http请求的等待 以上工作但适用于每个按键,但不适用于模糊事件

1 个答案:

答案 0 :(得分:0)

我不知道您可以延迟控制验证

但是你可以推迟两件事:

  • HTTP请求。 debounceTime()运算符允许您在用户完成输入后等待n毫秒以执行请求。见this example
  • 显示错误。即使字段的有效性是根据用户类型计算的,您仍然可以等待模糊显示错误。当字段模糊时,将标志设置为true:<input (blur)="displayError=true">。然后使用该标志显示错误:<div *ngIf="error && displayError">Error message</div>