我想创建自定义验证来验证密码是否相同,但问题是自定义验证程序不触发。对不起,我无法分享plunkr。Angular 4自定义表单验证不触发
//这里是注册组件(进口)
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('/^(([^<>()\[\]\\.,;:\[email protected]"]+(\.[^<>()\[\]\\.,;:\[email protected]"]+)*)|(".+"))@((\[[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()吗? – JGFMK
感谢'==='的东西,不需要使用“()”,就像我从例子中看到的那样。 –