解決Element組件的坑:抽屜drawer和彈窗dialog
業(yè)務(wù)場(chǎng)景
因?yàn)轫?xiàng)目需要封裝組件,考慮二次封裝抽屜組件el-drawer,在父組件控制抽屜組件的顯示隱藏。
需要在指定的組件中打開抽屜。
在抽屜組件el-drawer里使用自己封裝的一個(gè)自定義組件。
存在以下兩個(gè)大問題:
- 父組件控制抽屜組件的顯示隱藏效果無法呈現(xiàn)
- 抽屜組件里的自定義組件沒有加載/創(chuàng)建出來
針對(duì)第一個(gè)問題,具體解決方案
- 父組件:
<Drawer :isShowDrawer.sync = "isShowDrawer" @closeDrawer="isShowDrawer = $event"></Drawer>
- 子組件Drawer:
<el-drawer :visible.sync="isShow" direction="rtl" ref="drawerExam"></el-drawer> ... props: { isShowDrawer: { type: Boolean, default: false }, }, computed: { isShow: { set(val) { this.$emit('closeDrawer', val); }, get() { return this.isShowDrawer; } }, },
若想實(shí)現(xiàn),在指定的組件中打開抽屜,需要添加以下樣式
- 父組件樣式:
{ position: relative; overflow: hidden; }
- 抽屜組件:
設(shè)置position為絕對(duì)定位,但是會(huì)出現(xiàn)一個(gè)問題:v-modal遮罩層是滿屏顯示的
因此最終解決方案為:
先在抽屜組件外套一層div標(biāo)簽,再修改內(nèi)部樣式
<div class="drawerExam-container"> <el-drawer :visible.sync="isShow" direction="rtl" ref="drawerExam" @open="openDrawer()"></el-drawer> </div> ... .drawerExam-container { ::v-deep .v-modal { position: absolute; } }
針對(duì)第二個(gè)問題,具體解決方案
在抽屜組件里,引入了自己封裝的組件Checkbox,不能出現(xiàn)的原因是:Element官網(wǎng)有提到
如下我在抽屜組件中引入了Checkbox(自己封裝的組件),其中,dataList是父組件傳給Checkbox的數(shù)據(jù),chooseClass是Checkbox返回來的數(shù)據(jù)
<el-drawer :visible.sync="isShow" direction="rtl" ref="drawerExam" @open="openDrawer()"> <Checkbox :dataList="easy" @chooseEasy="updateForm" ref="easyRef"></Checkbox> </el-drawer>
解決方法:
- 給el-drawer增加open回調(diào)函數(shù)
- 通過使用Checkbox內(nèi)部方法賦值的方式,讓Checkbox組件能夠擁有值(因?yàn)樵贑heckbox組件內(nèi)接收不到父組件傳過去的dataList,才考慮使用Checkbox組件內(nèi)部方法直接給組件賦值
el-drawer的open回調(diào)函數(shù): ... openDrawer() { this.$nextTick(() => { setTimeout(() => { this.$refs.easyRef.UpdateList(this.easy); }, 0) }) }, Checkbox組件: ... UpdateList(arr) { this.newDataList = arr; // 置空該組件原有的值 this.checkboxGroup = []; this.chooseEasy(); }, // 多選選中后給父組件傳值 chooseEasy() { this.$emit('chooseEasy', this.checkboxGroup); },
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue實(shí)現(xiàn)導(dǎo)出excel表格功能
這篇文章主要介紹了Vue實(shí)現(xiàn)導(dǎo)出excel表格的功能,在文章末尾給大家提到了vue中excel表格的導(dǎo)入和導(dǎo)出代碼,需要的朋友可以參考下2018-03-03vue.js中使用微信掃一掃解決invalid signature問題(完美解決)
這篇文章主要介紹了vue.js中使用微信掃一掃解決invalid signature問題(推薦),本文通過實(shí)例代碼給出解決方法,代碼簡(jiǎn)單易懂非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04詳解新手使用vue-router傳參時(shí)注意事項(xiàng)
這篇文章主要介紹了詳解新手使用vue-router傳參時(shí)注意事項(xiàng),詳細(xì)的介紹了幾種常見錯(cuò)誤,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06vue-manage-system升級(jí)到vue3的開發(fā)總結(jié)分析
這篇文章主要為大家介紹了vue-manage-system升級(jí)到vue3的開發(fā)總結(jié)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Vue使用Tinymce富文本自定義toolbar按鈕的實(shí)踐
本文主要介紹了Vue使用Tinymce富文本自定義toolbar按鈕,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12vue中獲取滾動(dòng)table的可視頁面寬度調(diào)整表頭與列對(duì)齊(每列寬度不都相同)
這篇文章主要介紹了vue中獲取滾動(dòng)table的可視頁面寬度,調(diào)整表頭與列對(duì)齊(每列寬度不都相同),需要的朋友可以參考下2019-08-08Vue Router之router.push和router.resolve頁面跳轉(zhuǎn)方式
這篇文章主要介紹了Vue Router之router.push和router.resolve頁面跳轉(zhuǎn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04Vue倒計(jì)時(shí)3秒后返回首頁Demo(推薦)
這篇文章主要介紹了Vue倒計(jì)時(shí)3秒后返回首頁Demo,倒計(jì)時(shí)結(jié)束后要清除計(jì)時(shí)器,防止內(nèi)存泄漏,本文通過示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2023-11-11VUE?html5-qrcode實(shí)現(xiàn)H5掃一掃功能實(shí)例
這篇文章主要給大家介紹了關(guān)于VUE?html5-qrcode實(shí)現(xiàn)H5掃一掃功能的相關(guān)資料,html5-qrcode是輕量級(jí)和跨平臺(tái)的QR碼和條形碼掃碼的JS庫,集成二維碼、條形碼和其他一些類型的代碼掃描功能,需要的朋友可以參考下2023-08-08