反应形式在构造上调用自定义验证器功能吗?

时间:2018-12-04 14:03:53

标签: angular typescript

我正在使用isPassVaid检查有效密码,我注意到表单在构造时(formInit)调用了isPassValid,为什么?

  ngOnInit() {
    this.formInit();
  }  

  formInit() {
    this.form = this.fb.group({
      password: ['', [Validators.required, this.isPassVaid]]
    });
  }

  isPassValid(control: FormControl) {
    if (control.value) {
      const regex = '^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[^\\da-zA-Z]).{6,10}$';
      const regexp = new RegExp(regex, 'g');
      if (regexp.test(control.value)) {
        return;
      } else {
        return { invalidPass: true };
      }
    }
  }

1 个答案:

答案 0 :(得分:0)

在根据生命周期构建组件之后在ngoninit中初始化该窗体时,它将调用isPassValid并显示无效的bcz并将其作为初始化值

所以请像下面那样使用

formInit() {
    this.form = this.fb.group({
      password: ['', Validators.compose([   Validators.required,    Validators.pattern('  ^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[^\\da-zA-Z]).{6,10}$')])]
    });

}