使用简单的布尔值作为自定义验证器

时间:2017-11-13 22:26:36

标签: angular

我正在Angular 4中尝试表单验证,我对实现自定义验证器感到有些困惑。

这是我的表单组声明:

    this.signupForm = fb.group({
        'username': [null, Validators.compose([Validators.required, Validators.minLength(4), Validators.maxLength(21)])],
        'email': [null, Validators.compose([Validators.email, Validators.required])],
        'password': [null, Validators.compose([Validators.required, Validators.minLength(6)])]
    });

现在我有一个函数会在每次'username'控件值更改为查询我的DB时触发,如果用户已经存在则将布尔值'userExists'的值设置为true,否则设置为false。我似乎无法将常规Validators与这个简单的布尔值结合起来。 我在我的html中尝试过以下操作:

                <input type="text" [formControl]="signupForm.controls['username']" name="username" matInput placeholder="Username" (ngModelChange)="checkUsername($event)">
                <mat-error *ngIf="userExists || !signupForm.controls['username'].valid">
                    Error
                </mat-error>

我已经检查过userExists的值,这很好用。问题是,似乎mat-error只会根据声明的Validators出现,而不考虑其他任何问题。有趣的是,如果你删除* ngIf,验证规则仍将得到尊重,只有在无效条件(我不知道 - 必须与材料相关的东西)的情况下才会出现mat-error。

非常感谢任何帮助。

0 个答案:

没有答案