select2 事件在 angular4 中触发两次

Posted

技术标签:

【中文标题】select2 事件在 angular4 中触发两次【英文标题】:select2 event fires twice in angular4 【发布时间】:2018-04-04 20:56:50 【问题描述】:

标记

<select2 
         [data]="data"
         [width]="1024"
         [options]="options"
         [value]="selectedData"
         (valueChanged)="onTagChanged($event)">
</select2>

Angular 4 组件

onTagChanged(data:  value: string[] ): void 
    console.log(data);
    this.selectedData = data.value;

event valueChanged 触发两次,如何防止。

【问题讨论】:

在什么情况下? @RahulSingh:从 select2 中选择任何值时,onTagChanged 函数调用了两次。控制台打印两次。 尝试onSelect 事件而不是valueChanged @AvneshShakya:这行不通。 @KetanAkbari 你能记录下这个事件吗?就我而言,我寻找event.isUserInput === true 第一个事件有这个,第二个没有。 【参考方案1】:

 onTagChanged(data:  value: string[] ): void 
    console.log(data);
    this.selectedData = data.value;

您再次更改了值,即 this.selectedData,因此值会更改两次,一次是在您选择一个值时,一次是您手动更改值。 由于该值与 selectedData 绑定,因此您无需在上述方法中显式更改它。

[value]="selectedData"

【讨论】:

【参考方案2】:

你的代码应该是这样的

<select2 
         [data]="data"
         [width]="1024"
         [options]="options"
         (valueChanged)="onTagChanged($event)">
</select2>

只需删除 [value]="selectedData"

【讨论】:

以上是关于select2 事件在 angular4 中触发两次的主要内容,如果未能解决你的问题,请参考以下文章

清除 select2 而不触发更改事件

动态 select2 不触发更改事件

什么是 Textarea 中的 Angular4“更改”事件触发指令

Select2 自动触发事件变化

如何在 select2 new /remove tag 事件上触发新的 ajax?

Angular4 /子元素不触发父(点击)事件