javascript - 单击提交按钮时 Angular 7 表单验证不显示错误

标签 javascript angular

我正在尝试使用 Angular 7 Form Validation 实现重置密码表单作为 here 中的示例.在这个例子中,我们有三个字段,分别是旧密码、新密码和确认密码。如果我单击一个输入字段,例如没有输入任何值的旧密码字段,然后单击另一个输入字段,例如新密码字段,我将能够看到一条来自验证的错误消息。但是,如果我不触摸三个输入字段中的任何一个并直接单击更新,则不会显示任何错误。如何实现点击按钮时显示每个输入字段验证错误的功能?

最佳答案

您只需用表单标签替换您的 div 包装器。

stackblitz

<form id='reset-password' [formGroup]='formGroup'>
  <mat-form-field class="reset-password-fields">
    <input matInput required [(ngModel)]="oldPassword" [type]="displayOldPassword ? 'text' : 'password'"
      autocomplete="off" [formControl]="oldPasswordFormControl" [errorStateMatcher]="appErrorMatcher" required>
    <mat-placeholder class="placeholder" color="primary">{{ 'enter-your-old-password' }}</mat-placeholder>
    <mat-icon matSuffix (click)="displayOldPassword = !displayOldPassword">
      {{displayOldPassword ? 'visibility' : 'visibility_off'}}</mat-icon>
    <mat-error *ngIf="oldPasswordFormControl.hasError('required')">
      Old password cannot be
      <strong>empty</strong>
    </mat-error>
  </mat-form-field>
  <mat-form-field class="reset-password-fields">
    <input matInput required [(ngModel)]="newPassword" [type]="displayNewPassword ? 'text' : 'password'"
      autocomplete="off" [formControl]="newPasswordFormControl" [errorStateMatcher]="appErrorMatcher" required>
    <mat-placeholder class="placeholder" color="primary">{{ 'enter-your-new-password' }}</mat-placeholder>
    <mat-icon matSuffix (click)="displayNewPassword = !displayNewPassword">
      {{displayNewPassword ? 'visibility' : 'visibility_off'}}</mat-icon>
    <mat-error *ngIf="newPasswordFormControl.hasError('required')">
      New password cannot be
      <strong>empty</strong>
    </mat-error>
  </mat-form-field>
  <mat-form-field class="reset-password-fields">
    <input matInput required [(ngModel)]="confirmNewPassword" [type]="displayConfirmNewPassword ? 'text' : 'password'"
      autocomplete="off" [formControl]="confirmNewPasswordFormControl" [errorStateMatcher]="appErrorMatcher" required>
    <mat-placeholder class="placeholder" color="primary">{{ 'confirm-your-new-password' }}
    </mat-placeholder>
    <mat-icon matSuffix (click)="displayConfirmNewPassword = !displayConfirmNewPassword">
      {{displayConfirmNewPassword ? 'visibility' : 'visibility_off'}}</mat-icon>
    <mat-error *ngIf="formGroup.invalid">
      Confirm new password does not match password
    </mat-error>
  </mat-form-field>
  <div>
    <button (click)='update()' mat-flat-button color="primary">Update</button>
  </div>
</form>

但是如果表单组无效,您也可以通过禁用按钮来解决您的问题:

<button [disabled]="formGroup.invalid" (click)='update()' mat-flat-button color="primary">Update</button>

祝一切顺利

关于javascript - 单击提交按钮时 Angular 7 表单验证不显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58352429/

相关文章:

html - Angular 6 无法从 Assets 加载图像

typescript - 具有最后一个值的 Angular2 EventEmitter

angular - Angular 升级后 E2E typescript 测试未被转译

angular - QuaggaJS 与 Angular 2 的问题

angular - 如何从返回 JSON 数组的 Angular http get 填充 html 表

javascript - 是否可以使用 Javascript 获取文本的像素坐标并在其周围绘制矩形边框?

javascript - 将 div 居中放在 Canvas 的顶部,该 Canvas 的大小响应于 window.innerWidth 和 window.innerHeight

javascript - 为什么removeClass 不起作用?

javascript - 如何禁用鼠标中键拖动选择?

javascript - JavaScript中变量的范围是什么?