首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角: Validators.email无效,如果为空

角: Validators.email无效,如果为空
EN

Stack Overflow用户
提问于 2017-05-11 15:20:13
回答 5查看 18.1K关注 0票数 16

我正在用角(4.0)创建一个应用程序,其中包含一个表单(FormGroup)。在这种形式下,我有一个电子邮件输入(与FormControl),我使用Validators.email进行验证。

代码语言:javascript
复制
import { Validators } from '@angular/forms';

// ...
let validators = [];
if ([condition]) {
    validators.push(Validators.email);
}
let fc = new FormControl([value] || '', validators);
// ...

但是,当输入为空时,它是无效的(它有一个ng-invalid类),即使它不是必需的。

这是正确的行为吗?我能做什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-08-07 15:19:33

然而,eric2783的解决方案相当不错--如果将来Validators.email的输出发生变化,那么这个自定义验证器将与角的验证器输出不兼容。

为了保持兼容性,您应该这样做:

代码语言:javascript
复制
private customEmailValidator(control: AbstractControl): ValidationErrors {
  if (!control.value) {
    return null;
  }

  return Validators.email(control);
}
票数 20
EN

Stack Overflow用户

发布于 2017-08-15 13:40:16

我找到的最好的解决办法是:

代码语言:javascript
复制
<input type="email" name="email" [(ngModel)]="model.Email" [email]="model.Email!='' && model.Email!=null">
票数 12
EN

Stack Overflow用户

发布于 2017-07-10 17:15:30

您可以使用自定义验证器完成所需的任务。下面是我为使其正常工作而编写的验证器:

代码语言:javascript
复制
private customEmailValidator(control: AbstractControl): {[key: string]: any} {
    const emailError = Validators.email(control);
    if (control.value && emailError) {
        return {'email': {}};
    }

    return null;
}

然后您可以用validators.push(Validators.email);替换validators.push(this.customEmailValidator);

它使用了角的内置电子邮件验证器,但也确保电子邮件控制有一个值,然后返回一个错误。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43919547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档