【发布时间】:2018-01-05 04:38:53
【问题描述】:
我在为我的 Angular v5 应用程序制作自定义验证器时遇到问题。遵循Docs 中的基本密码匹配示例的文档,但它没有验证。
this.personalInfoForm = _fb.group({
'name': [null,Validators.minLength(7)],
'email': [null, CustomValidators.emailOrEmpty],
'password':[null],
'password_confirm': [null]
}, this.passwordMatch);
//EDIT
passwordMatch(g: FormGroup) {
return g.get('password').value === g.get('password_confirm').value ? null : {'mismatch': true};
}
另外,我如何才能使用具有动态输入名称的函数? 这样我就可以将它用于电子邮件等。 例如:match('inputToMatch');
编辑:添加了 HTML
<form class="col-lg-12" [formGroup]="personalInfoForm" (ngSubmit)="updatePersonalSettings(personalInfoForm.value)">
<h4>Basic Information</h4>
<div class="form-group row ">
<label for="name" class="col-sm-2 col-form-label">Full Name</label>
<div class="col-sm-6">
<input
type="text"
class="form-control"
id="name"
placeholder="{{currentUser.name}}"
formControlName="name"
/>
</div>
</div>
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-label">Email Address</label>
<div class="col-sm-6">
<input
type="email"
class="form-control"
id="email"
placeholder="{{currentUser.email}}"
formControlName="email"
value=" ">
</div>
</div>
<h4>Password</h4>
<div class="form-group row">
<label for="password" class="col-sm-2 col-form-label">Password</label>
<div class="col-sm-6">
<input
type="password"
class="form-control"
id="password"
formControlName="password"
placeholder="password">
</div>
</div>
<div class="form-group row">
<label for="password_confirm" class="col-sm-2 col-form-label">Confirm Password</label>
<div class="col-sm-6">
<input
type="email"
class="form-control"
id="password_confirm"
formControlName="password_confirm"
placeholder="password confirmation" >
</div>
</div>
<br>
<button [disabled]="!personalInfoForm.valid || !personalInfoForm.dirty" type="submit" class="btn btn-primary">Save</button>
得到它的工作:但我如何传递参数,以便我可以对不同的输入名称使用相同的方法。
passwordMatch(control: AbstractControl) {
const password = control.root.get('password');
const confirm = control.value;
if (!password || !confirm) return null;
return password.value === confirm ? null : { nomatch: true };
}
【问题讨论】:
-
您好,能否提供html源代码?
-
你怎么知道它没有验证(没有被解雇)?
-
@HarryNinh 很好,因为当我输入两个不同的密码时,我看到添加了 ng-valid 类。此外,提交按钮变为启用状态。意思是personalInfoForm.valid = true
-
等等,验证器内部的逻辑是错误的。只有当验证失败而不是通过时,您才应该返回非空对象。
-
你是对的!但是,无论哪种方式,表单仍然有效,而且如果密码不正确,则必须要求 password_confirm。致力于改变
标签: angular