Angular Material显示两条错误消息

时间:2018-01-22 18:15:21

标签: angular angular-material

我正在使用有棱角的材料和反应形式。我希望当错误消息显示时,只显示一条消息,如果我解决了一个错误则显示另一条消息。

现在如何:

enter image description here

HTML:

<mat-form-field class="example-full-width">
  <input matInput
         placeholder="Username"
         name="username"
         [formControlName]="'username'">
  <mat-error *ngIf="form.controls['username'].errors && form.controls['username'].touched">
    <div *ngIf="form.controls['username'].errors.required">
      Username is <strong>required</strong>
    </div>
    <div *ngIf="form.controls['username'].errors.minlength">
      Required length: {{form.controls['username'].errors.minlength['requiredLength']}}
      Actual length:{{form.controls['username'].errors.minlength['actualLength']}}
    </div>
    <div *ngIf="form.controls['username'].errors.pattern">
      Only a-zA-Z0-9
    </div>

  </mat-error>

</mat-form-field>

也许我应该使用if else或其他东西?你觉得怎么样?

3 个答案:

答案 0 :(得分:4)

如果控件是<mat-error>,您可以检查invalid,然后获取相应的错误消息,例如:

<mat-error *ngIf="form.controls['username'].invalid">{{ getErrorMessage() }}</mat-error>

然后在你的.ts中,您将拥有一个函数来检索相应的错误消息:

getErrorMessage() {
    return this.form.controls['username'].hasError('required') ? 'You must enter a value' :
        this.form.controls['username'].hasError('pattern') ? 'Not a valid username' :
        this.form.controls['username'].hasError('minlength') ? 'Required length is at least 3 characters' :
           '';
  }

如果您应用了合适的样式,则不需要divs<mat-error>元素就足够了。

这是stackblitz example

答案 1 :(得分:3)

有同样的问题。 这是我想出的,简洁而优雅。 如果有两个或多个mat-error,则不会同时显示。 但是,整个表格将无效,从而禁用了提交。

mat-error + mat-error {
  display: none;
}

答案 2 :(得分:0)

你快到了。要一次显示一条错误消息,只需检查其他错误(如果存在)。

<mat-error *ngIf="form.controls['username'].errors && form.controls['username'].touched">
  <div *ngIf="form.controls['username'].errors.required &&
    !form.controls['username'].errors.pattern 
    && form.controls['username'].errors.minlength">
    Username is <strong>required</strong> //this is the first message error
  </div>
  <div *ngIf="form.controls['username'].errors.minlength &&
        !form.controls['username'].errors.required &&
        !form.controls['username'].errors.pattern"> // display error if required and pattern errors don't exist Required length: {{form.controls['username'].errors.minlength['requiredLength']}}
    Actual length:{{form.controls['username'].errors.minlength['actualLength']}}
  </div>
  <div *ngIf="form.controls['username'].errors.pattern &&
                     !form.controls['username'].errors.required &&
                     !form.controls['username'].errors.minlength
                 ">
    Only a-zA-Z0-9
  </div>
</mat-error>

基本上只是否定!所有其他错误消息。这适合我。

希望这有帮助。