每当用户选择错误的角度输入时,向用户显示错误消息?

Posted

技术标签:

【中文标题】每当用户选择错误的角度输入时,向用户显示错误消息?【英文标题】:Show users an error message whenever they select wrong input in angular? 【发布时间】:2018-05-07 04:07:18 【问题描述】:

我正在用 Angular 构建一个组件(html、css、spec.ts、ts),我一直想要 endDate > startDate,所以我添加了验证器来执行此检查。下面是我的 HTML 表单:

<form class="unavailability-form" [formGroup]="unavailabilityForm" *ngIf="loaded">
  <mat-dialog-content>
    <div class="container"  fxLayout.xs="column" fxLayoutGap.xs="0" fxLayoutGap="10px">
      <div class="start-date" fxFlex="50%" fxFlexOrder="1">
        <mat-form-field>
          <input matInput [matDatepicker]="picker1" placeholder="'PORTAL.STARTDATE' | translate" type="text" formControlName="startDate" [(ngModel)]="unavailability.startDate" [readonly]="!componentPermission.writePermission">
          <mat-datepicker-toggle matSuffix [for]="picker1"></mat-datepicker-toggle>
          <mat-datepicker #picker1></mat-datepicker>
        </mat-form-field>
      </div>
      <div class="end-date" fxFlex="50%" fxFlexOrder="2">
        <mat-form-field>
          <input matInput [matDatepicker]="picker2" placeholder="'PORTAL.ENDDATE' | translate" type="text" formControlName="endDate" [(ngModel)]="unavailability.endDate" [readonly]="!componentPermission.writePermission">
          <mat-datepicker-toggle matSuffix [for]="picker2"></mat-datepicker-toggle>
          <mat-datepicker #picker2></mat-datepicker>
        </mat-form-field>
      </div>
    </div>
    <div class="container" fxLayout="row" fxLayout.xs="column" fxLayoutGap.xs="0" fxLayoutGap="10px">
      <div class="unavailability-reason" >
        <mat-form-field>
          <input matInput placeholder="'PORTAL.UNAVAILABILITYREASON' | translate" type="text" formControlName="unavailabilityReason" [(ngModel)]="unavailability.unavailabilityReason" [readonly]="!componentPermission.writePermission">
        </mat-form-field>
      </div>
    </div>
  </mat-dialog-content>
  <mat-dialog-actions>
    <div class="container" fxLayout="row" fxLayout.xs="column" fxLayoutGap.xs="0">
      <div class="item item-1" fxFlex="100%">
        <button mat-raised-button color="primary" [disabled]="!unavailabilityForm.valid || !componentPermission.writePermission" (click)="onSave()">'PORTAL.CONFIRM' | translate</button>
        <!--<button mat-raised-button [matDialogClose]="canceled" color="primary">'PORTAL.CANCEL' | translate</button>-->
      </div>
    </div>
  </mat-dialog-actions>
</form>

下面是我的角度代码,我还添加了验证器,如下所示。我想在用户选择endDate 小于startDate 时向他们显示错误消息。我怎样才能用我的代码在角度上做到这一点?我无法弄清楚这一点。

ngOnInit() 
    this.getParams();
    this.getPermissions();
    this.validateForm();


validateForm() 
    this.unavailabilityForm = this.formBuilder.group(
      'startDate': ['', Validators.required],
      'endDate': ['', Validators.required],
      'unavailabilityReason': ['']
    ,  validator: this.dateLessThan('startDate', 'endDate') );
  

  dateLessThan(from: string, to: string) 
    return (group: FormGroup):  [key: string]: any  => 
      let f = group.controls[from];
      let t = group.controls[to];
      if (f.value > t.value) 
        return 
          dates: "Date from should be less than Date to"
        ;
      
      return ;
    
  

【问题讨论】:

一种方法是在 ngModelChange 上调用一个函数来检查开始日期和结束日期,然后显示错误。 @tumulr 我想我已经用我自己的验证器检查错误了吗?我确实有自己的验证器来检查错误,但令人困惑的是如何向用户显示错误? 【参考方案1】:

在组件的 HTML 模板中,将消息预设在 div 中:

<div [hidden]="dates_valid" class="invalid_date">
  Date from should be less than Date to
</div>

管理dates_valid boolean 在组件中隐藏或显示它。

【讨论】:

以上是关于每当用户选择错误的角度输入时,向用户显示错误消息?的主要内容,如果未能解决你的问题,请参考以下文章

当用户输入错误的密码时,哪个错误消息更好?

maxlength 属性的角度验证消息

如何从 API 向最终用户显示错误消息?

当用户使用角度选中或取消选中复选框时,向用户显示警报消息

无法从ViewModel向用户显示协程错误消息

从服务传递到组件的角度错误消息