【发布时间】:2017-08-12 08:46:07
【问题描述】:
我想创建自定义验证来验证密码是否相同,但问题是自定义验证器未触发。抱歉,我无法分享 plunkr。
//这里是寄存器组件(和导入)
import { Component, OnInit } from '@angular/core';
import { FormGroup, FormBuilder, Validators } from "@angular/forms";
import { confirmPass } from '../confirm-password.validator';
register_form: FormGroup;
constructor(
private _fb: FormBuilder
) {
this.register_form = this._fb.group({
'name': ['', Validators.required],
'surname': ['', Validators.required],
'email': ['', [Validators.required, Validators.pattern('/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/')]],
'password': ['', [Validators.required, Validators.minLength(8)]],
'confirm_password': ['', [Validators.required, confirmPass]],
'phone': ['', Validators.required],
'birth_date': ['', Validators.required]
},)
}
//验证器函数
import { AbstractControl, ValidatorFn } from "@angular/forms";
export function confirmPass(controller): ValidatorFn {
return (control: AbstractControl): { [key: string]: any } => {
console.log(controller.root.controls['password']);
if (controller.value == controller.root.get('password').value) {
return null;
}
return { 'error': { value: controller.value } };
};
}
【问题讨论】:
-
还不确定,但有一条建议在验证器检查中使用 === 而不是 ==。与我的最小/最大验证器相比,我也只是做相当于 return { 'confirmPass' : {controller.value} } 并且在主代码中是否需要在 Validators 数组中使用 confirmPass()?
-
感谢 '===' 的事情,不,正如我从示例中看到的那样,不需要使用“()”。
标签: angular validation typescript angular-forms