【问题标题】:How to make 'email' input filed error message to display outside the input box?如何使“电子邮件”输入字段错误消息显示在输入框外?
【发布时间】:2019-05-06 19:49:56
【问题描述】:

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

这是代码

<!-- 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>

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

【问题讨论】:

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


    【解决方案1】:

    删除&lt;div *ngIf="isFieldValid('username')"&gt;

    【讨论】:

      【解决方案2】:

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

      还有这条线&lt;div *ngIf="isFieldValid('username')"&gt; 不允许完全创建 div

      【讨论】:

      • 是的,它实际上并没有创建 div。谢谢,你的代码看起来也不错。只需删除 mat-error 周围的“div”即可。
      猜你喜欢
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 2023-03-06
      • 2021-12-27
      • 1970-01-01
      • 2014-06-12
      • 2018-09-28
      相关资源
      最近更新 更多