Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular <;mat错误>;在角度8应用程序中不以反应形式工作_Angular_Angular Material_Angular8_Angular Reactive Forms_Angular Formbuilder - Fatal编程技术网

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]})}