【问题标题】:Angular - Dropdown validation - Validation is shown before the mouseup eventAngular - 下拉验证 - 在 mouseup 事件之前显示验证
【发布时间】:2021-12-05 08:07:57
【问题描述】:

我正在使用响应式表单来实现验证行为。 我在验证下拉组件时遇到问题。验证显示在 mouseup 事件之前(问题(yt 链接):Dropdown Validation

Stackblitz 链接:https://angular-um4dtz.stackblitz.io/

.html

<div class="col-md-8">
                <p-dropdown id="regionId" [required]="true" formControlName="selectedRegion"
                    placeholder="Select region (required)" [options]="regions" optionLabel="name"
                    [ngClass]="{'ng-invalid ng-dirty is-invalid' : (equipmentForm.get('selectedRegion').touched || equipmentForm.get('selectedRegion').dirty) && !equipmentForm.get('selectedRegion').valid }">
                </p-dropdown>
                <span class="invalid-feedback">
                    <span *ngIf="equipmentForm.get('selectedRegion').errors?.required">
                        Please select a region.
                    </span>
                </span>
</div>

我的问题是,这是预期的行为还是?

【问题讨论】:

标签: angular typescript validation angular-reactive-forms primeng-dropdowns


【解决方案1】:

所以,据我从调试中了解到,这是奇怪的预期行为。

您的输入控件selectedStock 直接具有以下错误状态:{ "required": true }。因此,您的错误消息

<span class="invalid-feedback">
  <span *ngIf="equipmentForm.get('selectedStock').errors?.required">
    Please select a stock.
  </span>
</span>

已经存在于 HTML 中。 但是因为 CSS 类 invalid-feedback 而没有显示。只要您想单击下拉选项,它就会变得可见,因为输入控件变脏并且应用了 is-invalid 类。

据我所知,您不需要自己将类 ng-invalid 设置为控件,因为它将由 Angular 设置。

解决方案

目前我发现的唯一方法是:

<p-dropdown
  ...
  (onHide)="equipmentForm.get('selectedStock').markAsDirty()"
  [ngClass]="{
    'is-invalid': equipmentForm.get('selectedStock').dirty && !equipmentForm.get('selectedStock').valid
  }">
</p-dropdown>

在这种方法中,一旦下拉覆盖关闭,您就将控件标记为脏。所以,你的错误会在之后显示出来。

【讨论】:

  • 我该如何解决这个问题。你有什么解决办法吗?我想在释放鼠标左键后显示验证错误,而不是在单击时显示。目前的情况对用户非常不友好。
  • 我添加了一个解决方案。我希望它有所帮助,但我不知道这是否是这里最好的方法
  • 好的,这可能是一个解决方案,我会尝试找到更好的解决方案,如果我不这样做,我会将此答案标记为正确。谢谢你:)
猜你喜欢
  • 2011-09-17
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
  • 2019-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多