Rol*_*ácz 15 javascript forms validation angular
我正在Angular(4.0)中创建一个包含form(FormGroup
)的应用程序.在这种形式我有一个电子邮件输入(带FormControl
),我Validators.email
用于验证.
import { Validators } from '@angular/forms';
// ...
let validators = [];
if ([condition]) {
validators.push(Validators.email);
}
let fc = new FormControl([value] || '', validators);
// ...
Run Code Online (Sandbox Code Playgroud)
但是当输入为空时,它是无效的(它有一个ng-invalid
类),即使它不是必需的.
这是一个正确的行为吗?我能做什么?
mat*_*wka 15
然而,eric2783的解决方案非常好 - 如果将来输出Validators.email
会改变,那么这个自定义验证器将与angular的验证器输出不兼容.
以下是保持兼容性应该做的事情:
private customEmailValidator(control: AbstractControl): ValidationErrors {
if (!control.value) {
return null;
}
return Validators.email(control);
}
Run Code Online (Sandbox Code Playgroud)
Ale*_* N. 12
我找到的最佳解决方案是:
<input type="email" name="email" [(ngModel)]="model.Email" [email]="model.Email!='' && model.Email!=null">
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以使用自定义验证器完成所需的操作.这是我为了让它工作而编写的验证器:
private customEmailValidator(control: AbstractControl): {[key: string]: any} {
const emailError = Validators.email(control);
if (control.value && emailError) {
return {'email': {}};
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
然后,你可以替换validators.push(Validators.email);
使用validators.push(this.customEmailValidator);
它使用angular内置的电子邮件验证程序,但也确保电子邮件控件在返回错误之前具有值.
模板驱动表单中的解决方法:
<input [(ngModel)]="model.email" [email]="model.email!==''">
Run Code Online (Sandbox Code Playgroud)
这对我有用(确保用空字符串初始化模型值).
归档时间: |
|
查看次数: |
12506 次 |
最近记录: |