如何使“电子邮件”输入字段错误消息显示在输入框之外?

时间:2019-05-06 19:49:57

标签: angular-material angular7 angular-reactive-forms

我使用的是反应形式,有多个输入字段,每个字段都有各自的错误。所有输入字段错误消息都出现在输入框的外部,这是正确的,并且默认情况下。但是电子邮件输入字段是唯一的字段,它的错误消息出现在输入字段内。

这是代码

<!-- username -->
    <div class="">
      <mat-form-field class="">
        <input type="email" matInput
               placeholder="Email" 
               formControlName="username" required>
        <div *ngIf="isFieldValid('username')">
          <mat-error               
            *ngIf="modelForm.controls['username'].hasError('required') 
                   &&
                  modelForm.get('username').touched">
            This is required
          </mat-error>
          <mat-error 
           *ngIf="modelForm.controls['username'].hasError('pattern')">
              Email invalid
          </mat-error>
          <mat-error                                 
           *ngIf="!modelForm.controls['username'].hasError('required') 
                  &&
                  !modelForm.controls['username'].hasError('pattern') 
                  && 
                  modelForm.controls['username'].hasError('isDupe')">               
                    This email has been used already
          </mat-error>
        </div>

      </mat-form-field>
    </div>

<!-- password -->
    <div class="">
      <mat-form-field class="">
        <input matInput type="password" placeholder="Password" 
               formControlName="password" required>

            <mat-error 
                 *ngIf="password.hasError('required')">      
               This is required    
            </mat-error>
        <mat-error 
             *ngIf="password.hasError('pattern')">
          Password should contain at least one number
        </mat-error>

      </mat-form-field>
    </div>

我想使电子邮件错误消息出现在输入字段的下方,类似于密码错误消息。

enter image description here

2 个答案:

答案 0 :(得分:1)

删除<div *ngIf="isFieldValid('username')">

答案 1 :(得分:1)

内部HTML文件采用这种方式:

<form [formGroup]="registerForm" (ngSubmit)="onSubmit()">
    <div class="form-group">
        <label>First Name</label>
        <input type="text" formControlName="firstName" class="form-control" [ngClass]="{ 'is-invalid': submitted && f.firstName.errors }" />
        <div *ngIf="submitted && f.firstName.errors" class="invalid-feedback">
            <div *ngIf="f.firstName.errors.required">First Name is required</div>
        </div>
    </div>
<form/>

在TS文件中:

export class AppComponent implements OnInit {
    registerForm: FormGroup;
    submitted = false;

    constructor(private formBuilder: FormBuilder) { }

    ngOnInit() {
        this.registerForm = this.formBuilder.group({
            firstName: ['', Validators.required]
        });
    }

    // convenience getter for easy access to form fields
    get f() { return this.registerForm.controls; }

    onSubmit() {
        this.submitted = true;

        // stop here if form is invalid
        if (this.registerForm.invalid) {
            return;
        }

        alert('SUCCESS!! :-)\n\n' + JSON.stringify(this.registerForm.value))
    }
}

这行<div *ngIf="isFieldValid('username')"> 不允许完全创建div