el-select組件綁定change事件的踩坑記錄
el-select組件綁定change事件踩坑
要注意區(qū)分elementUI組件(比如el-select、el-button、el-input等組件)的focus、click、change等事件和DOM的focus、click、change原生事件,二者是不一樣的。
如果要在element組件上觸發(fā)原生事件,一律都得加.native修飾符,否則無法觸發(fā)事件。
但是要注意很多elementUI的組件本身封裝了focus、click、change等事件,比如el-button的click事件,是經過elementUI封裝過的,所以給el-button綁定click事件時,不需要加.native修飾符,el-input的@focus事件也是同理。
今天踩了一個坑,在給el-select綁定change事件時,沒搞清楚該change事件是elementUI封裝過的change事件@change=“changeGateway(event)”,發(fā)現(xiàn)event一直是和選中的option的value值保持一致,按照網上博客寫的event.target.value拿到的值一直都是undefined,最后才發(fā)現(xiàn),博客里的select是原生的select,而我寫的是el-select,給el-select綁定的change事件不是dom原生的change事件,而是elementUI封裝過了的change事件,回調函數(shù)的參數(shù)是下拉列表目前的選中值,所以$event才一直和選中的option的value值保持一致。
另外要注意由于el-select組件已經封裝了change事件,就無法再綁定原生的change事件,如果對el-select綁定change事件像@change.native這樣寫,change事件是不會觸發(fā)的!
再次強調:
elementUI組件如果已經封裝過click、change、focus等事件,則無法再綁定DOM原生的click、change、focus事件,即使加.native修飾符也沒用。
但今天來了個需求,在點擊選擇關聯(lián)網關的下拉列表時,不僅要傳網關name參數(shù)給后端,還要在改變option的同時再額外多傳一個gatewayIp參數(shù)給后端,這個gatewayIp要在下拉列表option的數(shù)據(jù)里面拿,起初想通過給el-select組件綁定change事件拿到選中的option的完整數(shù)據(jù),最終發(fā)現(xiàn)做不到,那樣只能拿到選中的option的value值(因為elementUI封裝的change事件的回調參數(shù)就是下拉列表目前的選中值,見上圖),最后的實現(xiàn)思路是給el-option綁定原生click事件拿到選中的option的完整數(shù)據(jù)item
代碼如下:
<el-form-item label="關聯(lián)網關" 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的完整數(shù)據(jù)item this.form.gateWayIp = data.gateWayInfo.ip; },
el-select實現(xiàn)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的實現(xiàn)方法
Axios是一款網絡前端請求框架,本文主要介紹了vue中Axios添加攔截器刷新token的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02Vue3中element-plus全局使用Icon圖標的過程詳解
我們在用vue開發(fā)網站的時候,往往圖標是起著很重要的作,這篇文章主要給大家介紹了關于Vue3中element-plus全局使用Icon圖標的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-01-01vue項目用后端返回的文件流實現(xiàn)docx和pdf文件預覽
本文主要介紹了vue項目用后端返回的文件流實現(xiàn)docx和pdf文件預覽,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-04-04vue填坑之webpack run build 靜態(tài)資源找不到的解決方法
今天小編就為大家分享一篇vue填坑之webpack run build 靜態(tài)資源找不到的解決方法。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09ant-design-vue Table pagination分頁實現(xiàn)全過程
這篇文章主要介紹了ant-design-vue Table pagination分頁實現(xiàn)全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04Vue實現(xiàn)騰訊云點播視頻上傳功能的實現(xiàn)代碼
這篇文章主要介紹了Vue實現(xiàn)騰訊云點播視頻上傳功能的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08