el-select组件绑定change事件的踩坑记录

 更新时间:2023年01月16日 09:19:45   作者:希里_小E  
这篇文章主要介绍了el-select组件绑定change事件的踩坑记录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

el-select组件绑定change事件踩坑

要注意区分elementUI组件(比如el-select、el-button、el-input等组件)的focus、click、change等事件和DOM的focus、click、change原生事件,二者是不一样的。

如果要在element组件上触发原生事件,一律都得加.native修饰符,否则无法触发事件。

但是要注意很多elementUI的组件本身封装了focus、click、change等事件,比如el-button的click事件,是经过elementUI封装过的,所以给el-button绑定click事件时,不需要加.native修饰符,el-input的@focus事件也是同理。

今天踩了一个坑,在给el-select绑定change事件时,没搞清楚该change事件是elementUI封装过的change事件@change=“changeGateway(event)”,发现event一直是和选中的option的value值保持一致,按照网上博客写的event.target.value拿到的值一直都是undefined,最后才发现,博客里的select是原生的select,而我写的是el-select,给el-select绑定的change事件不是dom原生的change事件,而是elementUI封装过了的change事件,回调函数的参数是下拉列表目前的选中值,所以$event才一直和选中的option的value值保持一致。

另外要注意由于el-select组件已经封装了change事件,就无法再绑定原生的change事件,如果对el-select绑定change事件像@change.native这样写,change事件是不会触发的!

再次强调:

elementUI组件如果已经封装过click、change、focus等事件,则无法再绑定DOM原生的click、change、focus事件,即使加.native修饰符也没用。

但今天来了个需求,在点击选择关联网关的下拉列表时,不仅要传网关name参数给后端,还要在改变option的同时再额外多传一个gatewayIp参数给后端,这个gatewayIp要在下拉列表option的数据里面拿,起初想通过给el-select组件绑定change事件拿到选中的option的完整数据,最终发现做不到,那样只能拿到选中的option的value值(因为elementUI封装的change事件的回调参数就是下拉列表目前的选中值,见上图),最后的实现思路是给el-option绑定原生click事件拿到选中的option的完整数据item

代码如下:

<el-form-item label="关联网关" prop="bindGateName">
  <el-select v-model="form.bindGateName" placeholder="请选择" clearable>
    <el-option v-for="item in bindGates" :label="item.gateWayInfo.name" :value="item.gateWayInfo.name" @click.native="changeGateway(item)" :key="item.gateWayId"></el-option>
  </el-select>
</el-form-item>

changeGateway(data){
  // console.log(data) //此data是选中的那个option的完整数据item 
  this.form.gateWayIp = data.gateWayInfo.ip;
},

el-select实现change事件

官网提供了el-select的change事件,但是并没有提供使用示例,但是最近在vue项目中却要使用到。

直接上代码,HTML部分

<el-select @change="selectChanged" v-model="devType" size=small>
    <el-option v-for="item in devTypes" :key="item" :label="item" :value="item"></el-option>
</el-select>

js部分

data() {
  return {
    devType: '',
    devTypes: []
  }
},
 
methods: {
  selectChanged(value) {
    console.log(value)
  }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue中Axios添加拦截器刷新token的实现方法

    vue中Axios添加拦截器刷新token的实现方法

    Axios是一款网络前端请求框架,本文主要介绍了vue中Axios添加拦截器刷新token的实现方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Vue3中element-plus全局使用Icon图标的过程详解

    Vue3中element-plus全局使用Icon图标的过程详解

    我们在用vue开发网站的时候,往往图标是起着很重要的作,这篇文章主要给大家介绍了关于Vue3中element-plus全局使用Icon图标的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-01-01
  • 详解Vuex下Store的模块化拆分实践

    详解Vuex下Store的模块化拆分实践

    这篇文章主要介绍了详解Vuex下Store的模块化拆分实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • vue项目用后端返回的文件流实现docx和pdf文件预览

    vue项目用后端返回的文件流实现docx和pdf文件预览

    本文主要介绍了vue项目用后端返回的文件流实现docx和pdf文件预览,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • vue中使用console.log打印的实现

    vue中使用console.log打印的实现

    这篇文章主要介绍了vue中使用console.log打印的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue填坑之webpack run build 静态资源找不到的解决方法

    vue填坑之webpack run build 静态资源找不到的解决方法

    今天小编就为大家分享一篇vue填坑之webpack run build 静态资源找不到的解决方法。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • ant-design-vue Table pagination分页实现全过程

    ant-design-vue Table pagination分页实现全过程

    这篇文章主要介绍了ant-design-vue Table pagination分页实现全过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • vue使用rem实现 移动端屏幕适配

    vue使用rem实现 移动端屏幕适配

    这篇文章主要介绍了vue使用rem实现 移动端屏幕适配的相关知识,通过实例代码介绍了vue用rem布局的实现代码,需要的朋友可以参考下
    2018-09-09
  • Vue实现tab切换的两种方法示例详解

    Vue实现tab切换的两种方法示例详解

    这篇文章主要介绍了Vue实现tab切换的两种方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-11-11
  • Vue实现腾讯云点播视频上传功能的实现代码

    Vue实现腾讯云点播视频上传功能的实现代码

    这篇文章主要介绍了Vue实现腾讯云点播视频上传功能的实现代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08

最新评论