如何使用el-cascader組件寫下拉級聯(lián)多選及全選功能
樣式
說明: 級聯(lián)選擇器中加上全選的按鈕, 并且保證數(shù)據(jù)響應式。
思路
- 因為是有全選的功能,所以不能直接使用
el-cascader
組件, 而是選擇使用el-select
組件, 在此組件內(nèi)部使用el-cascader-panel
級聯(lián)面板 - 全選按鈕也是寫在el-select組件中, 并且去監(jiān)聽全選按鈕的狀態(tài), 根據(jù)全選的狀態(tài), 決定級聯(lián)面板的數(shù)據(jù)與樣式
- 如果想要獲取到最終選擇的數(shù)據(jù), 還是取級聯(lián)面板綁定的值,而不是select的值。
代碼實現(xiàn)
template:
注意:
1,el-select組件中,必須要寫入一個el-option組件, 可以隱藏, 但必須存在2,選中的數(shù)據(jù)響應式綁定的其實是級聯(lián)面板的數(shù)據(jù),同步到了select中,并且滿足其展示的內(nèi)容,比如“已選中2項”
<el-form-item> <div class="theme-date theme"> <div class="theme-date-prepend">功能模塊</div> <el-select v-model="selectModuleData"> <el-option style="display: none" value=""></el-option> <el-checkbox class="allselect" v-model="allSelectModule" >全選</el-checkbox > <el-cascader-panel ref="cascaderModule" :options="treeList" v-model="cascaderModuleData" popper-class="popper-select" :show-all-levels="false" :props="cascaderProp" clearable > </el-cascader-panel> </el-select> </div> </el-form-item>
script:
// data數(shù)據(jù): cascaderProp: { multiple: true, value: "name", label: "name", children: "children", }, allSelectModule: false, cascaderModuleData: [], selectModuleData: null, // watch watch: { // 監(jiān)聽多選按鈕是否被勾選 allSelectModule: { immediate: true, handler(newVal) { if (newVal) { /// 執(zhí)行的方法,可以在下面的methods中尋找 this.cascaderAllSelect(); } else { if(!this.$refs.cascaderModule) return this.$refs.cascaderModule.clearCheckedNodes(); this.$refs.cascaderModule.checkedValue = []; // 清空選中值 this.cascaderModuleData = []; this.$refs.cascaderModule.activePath = []; // 清除高亮 this.$refs.cascaderModule.syncActivePath(); // 初始化(只展示一級節(jié)點) } }, }, // 監(jiān)聽級聯(lián)面板綁定的數(shù)據(jù)去同步select的數(shù)據(jù), 讓其顯示在選擇框中 cascaderModuleData: { immediate: true, handler(newVal) { if (newVal.length === 0) { this.selectModuleData = ""; if(!this.$refs.cascaderModule) return this.$refs.cascaderModule.activePath = []; // 清除高亮 this.$refs.cascaderModule.syncActivePath(); // 初始化(只展示一級節(jié)點) } else { this.selectModuleData = `已選${newVal.length}項`; } }, }, }, /// methods // 級聯(lián)選擇器全選, 其中moduleArray表示的是級聯(lián)面板綁定的數(shù)據(jù),表示如果此時沒有全選的話那就將所有的數(shù)據(jù),賦值到級聯(lián)面板中,這樣在顯示中,就表示全選的狀態(tài)。 cascaderAllSelect() { if (this.cascaderModuleData.length !== this.moduleArray.length) { this.cascaderModuleData = this.moduleArray; } }, // 直接獲取級聯(lián)面板的數(shù)據(jù)cascaderModuleData, 作為參數(shù)提交即可
到此這篇關于如何使用el-cascader組件寫下拉級聯(lián)多選及全選功能的文章就介紹到這了,更多相關el-cascader下拉級聯(lián)多選內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Vue2.x 項目性能優(yōu)化之代碼優(yōu)化的實現(xiàn)
這篇文章主要介紹了Vue2.x 項目性能優(yōu)化之代碼優(yōu)化的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03element中async-validator異步請求驗證使用
本文主要介紹了element中async-validator異步請求驗證使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-05-05vue如何解決數(shù)據(jù)加載時,插值表達式閃爍問題
這篇文章主要介紹了vue如何解決數(shù)據(jù)加載時,插值表達式閃爍問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01element plus中el-upload實現(xiàn)上傳多張圖片的示例代碼
最近寫項目的時候需要一次上傳多張圖片,本文主要介紹了element plus中el-upload實現(xiàn)上傳多張圖片的示例代碼,具有一定的參考價值,感興趣的可以了解一下2024-01-01