微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

<mat-error>在angular 8应用程序中无法以反应形式工作

如何解决<mat-error>在angular 8应用程序中无法以反应形式工作

我正在使用反应性方法来使用角和材质来构建表格。某种程度上,通过自定义验证器生成错误之一没有出现,而所有其他错误都可以正常工作。 下面是代码

<div fxLayout="row" fxLayoutGap="10px" fxLayoutAlign="center center" formGroupName="passwords">
    <!--original password-->
    <mat-form-field hintLabel="Should be at least 8 characters long">
        <input type="password" matInput placeholder="Your password" formControlName="password">
        <mat-error *ngIf="signUpForm.get('passwords.password').hasError('required')">
            Passwords cannot be blank
        </mat-error>
        <mat-error *ngIf="signUpForm.get('passwords.password').hasError('minlength')">
            Password has to be atleast 8 characters
        </mat-error>
    </mat-form-field>
    <!--confirmation password-->
    <mat-form-field hintLabel="Should be at least 8 characters long">
        <input type="password" matInput placeholder="Confirm password" formControlName="confirmPassword">
            <mat-error *ngIf="signUpForm.get('passwords.confirmPassword').hasError('required')">
                Passwords cannot be blank
            </mat-error>
            <mat-error *ngIf="signUpForm.get('passwords.confirmPassword').hasError('minlength')">
                 Password has to be atleast 8 characters
            </mat-error>  
            <mat-error *ngIf="signUpForm.get('passwords').hasError('paswordMismatch')">
                Passwords do not match
           </mat-error>
    </mat-form-field>   
</div>

此处无法正常工作。

下面是ts文件

    ngOnInit(): void{
    
        this.signUpForm = this.formBuilder.group({
            studentName: 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]*')]] }),email: [null,Validators.email,CustomEmailValidator.forbiddenEmailIds]],userMobNumber: [null,Validators.minLength(10),Validators.maxLength(10)]],studentID: [null,[Validators.required]],passwords: this.formBuilder.group({
                password: [null,Validators.minLength(8)]],confirmPassword: [null,Validators.minLength(8)]]
            },{validator: this.passwordConfirming}),enroledProgram: [null,studentDepartment: [null,facultyDepartment: [null,facultyEmail: [null,Validators.email]],facultyName: [null,funded: [null,[Validators.required]]
            });}
        
          passwordConfirming(c: AbstractControl): { [s: string]: boolean } { 
               console.log(c);
              if (c.get('password').value !== c.get('confirmPassword').value) {
                 return {paswordMismatch: true};
              }
          return null;
        }
    ```

解决方法

应该是

<div fxLayout="row" fxLayoutGap="10px" fxLayoutAlign="center center" formGroupName="passwords">
... 
            <mat-error *ngIf="signUpForm.get('passwords.confirmPassword').hasError('paswordMismatch')">
                Passwords do not match
           </mat-error>
    </mat-form-field>   
</div>
,

创建另一个名为“ 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;
}

**在表单所在的文件上:添加密码验证器,如下所示**

import { passwordValidator } from "./password.validator";

this.signUpForm = this.formBuilder.group({
            passwords: this.formBuilder.group({
                password: [null,[Validators.required,Validators.minLength(8)]],confirmPassword: [null,Validators.minLength(8)]]
            },{ validators: [passwordValidator]})}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?