当前位置: 首页 > news >正文

ElSelect 组件的 onChange 和 onInput 事件的区别

偶然遇到一个问题,在 ElSelect 组件中设置 filterable 属性后,监测不到复制粘贴的内容,也就意味着不能调用接口,下拉框内容为空。

简要代码如下:

<ElSelectstyle="width: 256px"multiplev-model={siteIdList}clearablefilterableremoteremoteMethod={getSiteList}placeholder="请输入门店名称">{siteList.value.map((item) => (<ElOption label={item.siteName} value={item.siteId} />))}
</ElSelect>

对此进行分析。

1. 直观区别

在 ElSelect 组件中,onInput 和 onChange 都是用于监听用户选择内容的事件,区别在于:

1、onInput 事件

触发时机:onInput 事件在用户每次选择新选项时都会立即触发,即每当输入值发生变化(无论是添加or移除),都会触发这个事件。

适用场景:通常用于实时响应用户输入,如动态更新页面数据、过滤、自动填充等。其触发频率较高,更适合于即时性要求较高的场景。

2、onChange 事件

触发时机:onChange 事件仅在用户选择内容发生最终变化并确认时触发。例如,在用户点击选项列表中的某一项完成选择后,onChange 才会触发。重复选择同一个选项不会触发 onChange。

适用场景:更适合在选择操作完成后再进行的逻辑处理,例如提交表单、更新数据等。因为它只在确认选择后触发,频率较低,适合用于非即时响应的场景。

2. 事件挂载

在 ElSelect 组件中,onInput 和 onChange 事件的挂载有明显的不同,这关系到它们在 Vue 中的实现和具体作用。

1、onInput 事件

挂载位置:onInput 事件实际上是与 v-model 绑定的默认事件。在 Vue 中,v-model 会自动绑定组件的 input 事件来更新数据,因此当 ElSelect 的选择值发生变化时,它会触发 onInput 事件,将新值传递给 v-model 绑定的数据。这点需要额外注意📢下!

🌰:

<el-select v-model="selectedValue" @input="handleInput"><el-optionv-for="item in options":key="item.value":label="item.label":value="item.value"/>
</el-select>

当 selectedValue 更新时,@input 会自动触发,实时同步数据。

2、onChange 事件

挂载位置:onChange 是 ElSelect 自带的事件监听器,与 v-model 没有直接关系。它可以单独挂载在组件实例上,用于检测最终选择的变化。这点需要额外注意📢下!

🌰:

<el-select v-model="selectedValue" @change="handleChange"><el-optionv-for="item in options":key="item.value":label="item.label":value="item.value"/>
</el-select>

当用户的选择发生最终变化后,@change 会触发 handleChange 方法,而不会在每次切换选项时触发。

总结

3. 解决方法

针对上述分析,可以在 ElSelect 组件上使用 onInput 事件,监听内容的改变。

<ElSelectref={storeRef}style="width: 256px"filterableremoteremoteMethod={getSiteList}onInput={(e) => { handleInput(e?.data || ''); }}multipleclearablev-model={siteIdList}placeholder="请输入门店名称">{siteList.value?.map((item) => (<ElOption label={item.siteName} value={item.siteId} />))}
</ElSelect>

然后在 handleInput 事件上调用 storeRef 的 remoteMethod 事件进一步处理,由此成功解决。

const handleInput = debounce((query, type) => {storeRef.value.remoteMethod(query);
}, 300);
http://www.lryc.cn/news/473841.html

相关文章:

  • 加密与数据提取:保护隐私的新途径
  • 博客摘录「 宋宝华:Linux文件读写(BIO)波澜壮阔的一生」2024年11月1日
  • 使用华为云数字人可以做什么
  • leetcode刷题记录——(十六)349. 两个数组的交集
  • vue3实现规则编辑器
  • 【快速上手】pyspark 集群环境下的搭建(Standalone模式)
  • 中文NLP地址要素解析【阿里云:天池比赛】
  • 使用AddressSanitizer内存检测
  • 11月1日星期五今日早报简报微语报早读
  • 实用篇:Postman历史版本下载
  • 微服务实战系列之玩转Docker(十七)
  • 操作系统-实验报告单(1)
  • rom定制系列------小米8青春版定制安卓14批量线刷固件 原生系统
  • CATIA许可证常见问题解答
  • PySpark Standalone 集群部署教程
  • 【源码+文档】基于SpringBoot+Vue旅游网站系统【提供源码+答辩PPT+参考文档+项目部署】
  • 9.排队模型-M/M/1
  • 【GO学习笔记 go基础】编译器下载安装+Go设置代理加速+项目调试+基础语法+go.mod项目配置+接口(interface)
  • 从0开始学习shell脚本
  • 官方工具重装Windows 11当前版本 /绕过硬件检查/免U盘
  • JavaEE初阶---网络原理/UDP服务器客户端程序
  • 每天10个vue面试题(六)
  • Qt:信号和槽
  • 可以免费商用的字体下载
  • centos7之LVS-TUNNEL模式
  • Linux驱动开发(3):字符设备驱动
  • 刘艳兵-DBA023-控制文件是Oracle 数据库用来查找数据库文件,控制文件包含以下哪些信息:
  • Vue Scoped CSS深度解析:原理、误区与最佳实践
  • 744. 寻找比目标字母大的最小字母
  • 浅谈QT中Tab键的切换逻辑