。。。翻了很多资料,一直没有找到对于el-select框在 @change和remove-tag事件同时使用时,处理事件先后顺序的问题
不过结论是终于解决了(liao)
所以决定把这次的踩坑记录存下来,方便后来者也遇到类似的问题可参考解决方案~
如果后续有问题或者新思路可以联系我哟~
一、踩坑前准备
- select 框 可多选
- select 框 可进行change事件
- select 框 可进行remove事件
- 远程(动态接口)获取下拉框数据
二、踩坑描述
- 根据每次选中的item数据详情,取到对应的某个属性dataType来做数据校验,由于数据是靠远程搜索的,所以需要定义一个全局变量先来存储该数据值
- 新增的情况: 每次取数据的最后一条作为详情,通常会在change事件中来写这部分的逻辑
- 编辑的情况:和后端配合完成,后端会返回个类型,从而在前端的角度来讲,也算新增
- 删除的情况:
踩坑来啦
,对于多选的 select 组件,当点击移除标签时,通常会先触发 change 事件,然后触发 remove 事件。这是因为移除标签会导致选中值发生变化,从而触发 change 事件。因为在 change 事件中已经有对数据的最后一条做了写逻辑处理(同2),所以,在删除时,也会走这块逻辑,这样是错误的,本身删除应该走对应remove的逻辑。
三、解决思路
说到这里, 可能迫不及待的想知道如何解决的啦,下面我就简单概括一下:
其实解决方案看着很简单,只是我们不太关注
思路:
为了实现在移除标签时先调用 remove 事件再调用 change 事件,可以使用 Vue 的 $nextTick
方法。以下是一个示例:
- 在 Vue 实例的 data 中添加一个标志变量,例如 isRemoving:
data() {
return {
is