Angular <;mat错误>;在角度8应用程序中不以反应形式工作
我使用一种反应式的方法来构建一个表单,使用角度和材质。不知何故,通过自定义验证器生成的一个错误没有显示出来,而所有其他错误都正常工作。 下面是代码Angular <;mat错误>;在角度8应用程序中不以反应形式工作,angular,angular-material,angular8,angular-reactive-forms,angular-formbuilder,Angular,Angular Material,Angular8,Angular Reactive Forms,Angular Formbuilder,我使用一种反应式的方法来构建一个表单,使用角度和材质。不知何故,通过自定义验证器生成的一个错误没有显示出来,而所有其他错误都正常工作。 下面是代码 密码不能为空 密码必须至少为8个字符 密码不能为空 密码必须至少为8个字符 密码不匹配 这台机器坏了 下面是ts文件 ngOnInit():void{ this.signUpForm=this.formBuilder.group({ 学生姓名:this.formBuilder.group({ firstName:[null,[Validators
密码不能为空
密码必须至少为8个字符
密码不能为空
密码必须至少为8个字符
密码不匹配
这台机器坏了
下面是ts文件
ngOnInit():void{
this.signUpForm=this.formBuilder.group({
学生姓名:this.formBuilder.group({
firstName:[null,[Validators.required,Validators.pattern('[a-zA-Z]*')],
middleName:[null,[Validators.pattern('[a-zA-Z]*')]],
lastName:[null,[Validators.pattern('[a-zA-Z]*')]]},
电子邮件:[null,[Validators.required,Validators.email,
CustomEmailValidator.ForbiddenEmailID]],
userMobNumber:[null,[Validators.required,Validators.minLength(10),
Validators.maxLength(10)],
studentID:[null,[Validators.required]],
密码:this.formBuilder.group({
密码:[null,[Validators.required,Validators.minLength(8)],
confirmPassword:[null,[Validators.required,Validators.minLength(8)]]
},{validator:this.passwordConfirming}),
enroledProgram:[null,[Validators.required]],
studentDepartment:[null,[Validators.required]],
facultyDepartment:[null,[Validators.required]],
facultyEmail:[null,[Validators.required,Validators.email]],
facultyName:[null,[Validators.required]],
出资:[null,[验证器.必需]]
});}
密码确认(c:AbstractControl):{[s:string]:布尔值}{
控制台日志(c);
if(c.get('password').value!==c.get('confirmPassword').value){
返回{paswordMismatch:true};
}
返回null;
}
```
应该是
...
密码不匹配
创建另一个名为“password.validator.ts”的文件,并编写以下代码:
import { AbstractControl, ValidatorFn } from "@angular/forms";
export function passwordValidator(
control: AbstractControl
): {
[key: string]: boolean;
} | null {
const password = control.get("password");
const confirmPassword = control.get("confirmPassword");
if (password.pristine || confirmPassword.pristine) {
return null;
}
return password && confirmPassword && password.value !== confirmPassword.value
? { missMatch: true }
: null;
}
**在表单所在的文件上:添加如下密码验证器--**
不应该是
{validator**s**:*[**this.passwordConfirming**]**}
?我认为对于单个验证器,不需要传递数组。我想到的一件可能的事情是,如果不接触同一表单组中的控件,则会隐藏错误。你能检查一下吗?只需创建一个错误条件,然后从第二个输入中集中精力即可。问题不在自定义验证中。之所以发生这种情况,是因为confirmPassword
是有效的
,这就是隐藏与此输入相关的任何错误的原因。angular认为paswordMismatch
错误与confirmPassword
相关,并隐藏所有错误。自定义错误状态匹配器可以做到这一点,或者当其父formGroup也无效时,您可以将confirmPassword
字段标记为无效
,也可以在名为passwords的组上进行验证,
import { passwordValidator } from "./password.validator";
this.signUpForm = this.formBuilder.group({
passwords: this.formBuilder.group({
password: [null, [Validators.required, Validators.minLength(8)]],
confirmPassword: [null, [Validators.required, Validators.minLength(8)]]
}, { validators: [passwordValidator]})}