p-multiSelect onchange 防止添加具有相同索引的元素

Posted

技术标签:

【中文标题】p-multiSelect onchange 防止添加具有相同索引的元素【英文标题】:p-multiSelect onchange prevent adding elements with the same index 【发布时间】:2022-01-23 03:51:47 【问题描述】:

我有来自数组的 6 个选项的多选选项。其中一个选项与其他选项有点不同(它允许添加备注,而其他选项则不允许)。当我选择此选项和其中一个字段 x(备注)时,在我删除它并再次选择后,但该字段将为空(假设在第一种情况下我正在添加 reark,而在第二次我不是) 所以多选会添加两次!但我希望每个索引都有 1 个变量(不关心其他字段)。我应该怎么做?另一个不同的地方是从服务器获取选定的值,什么时候应该在用户选择了它,似乎他没有选择。

  <p-multiSelect *ngIf="_decision.decisionStatusId == eDecisionType.Reject || _decision.decisionStatusId == eDecisionType.ReturnedToUser" [required]="formGroup.hasError('remark-reasons-required')"
                   [options]="reasons" defaultLabel="" formControlName="remarks" [(ngModel)]="selectedReasons" optionLabel="hebName"
                   [ngClass]="_decision.decisionStatusId == eDecisionType.ReturnedToUser || _decision.decisionStatusId == eDecisionType.Reject ? '' : 'display-none'"
                   selectedItemsLabel="0 "
                   (onChange)="onChangeReasonsValue($event)"></p-multiSelect>

.ts

onChangeReasonsValue(event:  value: ReviewDecisionReasonModel[] ): void 
    this.selectedReasons = event.value;
    this._decision.reasons = event.value;
    this.formGroup.markAsDirty();
    this.formGroup.markAsTouched();
    this.formGroup.updateValueAndValidity();
  

same index values

【问题讨论】:

Ylove,删除[(ngModel)](您可以在同一标签中使用[ngModel]formControlName)。我真的不明白你想做什么。 p-multiselect 将一个包含所有选定值的数组作为值。你不需要使用(onchange)。只需在 .html 中使用form?.value|json 来检查值 @Eliseo 谢谢,但在删除选定的情况下,我需要更新我的数组值,如果不进行更改,它不会完美发生。我的问题是多选让我用相同的键检查\取消选中对象。在第一次对象是键,x。移除 x 使其与 x,y 保持一致(因为我没有移除 y)然后当再次按下 x,w 时我将获得 x 两次。你明白吗? (我在问题中添加了图片) 【参考方案1】:

关于您的代码

你有一个*ngIf =condition[ngClass]=同样的条件?'':'display-none'`。所以你可以删除 [ngClass] -allways is fullfilled

您正在使用事件(onChange) 为变量selectedReasons_decision.reasons 赋值。看到 event.value 是一个数组,所有的对象都在多选中被选中。

你已经有[(ngModel)]="selectedReasons",所以不需要使用onChange事件

您有一个 formControlName="remark"。我看不到您的 FormGroup。此外,您可以在同一标签中使用 formControlName 和 ngModel。也许你想使用事件 onChange 来做一些类似的事情:

onChangeReasonsValue(event:  value: ReviewDecisionReasonModel[] ): void 
    this.formGroup.get('mark'.setValue(event.value)

? (但请记住删除代码中的 formControlName)

对不起,我看不懂[required]="formGroup.hasError('remark-reasons-required')"

【讨论】:

首先,非常感谢你的回答,我会尽量集中我的问题,我试过你写的但没有解决,因为问题不是显示问题。我删除了 ngModel。会发生什么我有多选选项列表。在一个选项中,我应该添加另一个字段备注字段。所以在第一次选择时添加这个字段。但是在删除选择时,它不会从数组中删除此选择,因为我没有删除备注字段。 所以当再次选择此选项时,将添加两次相同的索引(一个带有备注字段,一个带有备注字段)我只需要在数组中没有此索引时才需要设置值跨度>

以上是关于p-multiSelect onchange 防止添加具有相同索引的元素的主要内容,如果未能解决你的问题,请参考以下文章

如何在事件 onChange 上设置超时

样式化的组件输入失去焦点 onChange

如何防止文本区域中的重复空格

如何防止在方向更改时重新创建片段寻呼机中的片段?

是否有更干的方法来创建React文本输入表单元素?

javascript onchange onChange OnChange选择