如何使用el-cascader組件寫下拉級(jí)聯(lián)多選及全選功能
樣式
說(shuō)明: 級(jí)聯(lián)選擇器中加上全選的按鈕, 并且保證數(shù)據(jù)響應(yīng)式。

思路
- 因?yàn)槭怯腥x的功能,所以不能直接使用
el-cascader組件, 而是選擇使用el-select組件, 在此組件內(nèi)部使用el-cascader-panel級(jí)聯(lián)面板 - 全選按鈕也是寫在el-select組件中, 并且去監(jiān)聽全選按鈕的狀態(tài), 根據(jù)全選的狀態(tài), 決定級(jí)聯(lián)面板的數(shù)據(jù)與樣式
- 如果想要獲取到最終選擇的數(shù)據(jù), 還是取級(jí)聯(lián)面板綁定的值,而不是select的值。
代碼實(shí)現(xiàn)
template:
注意:
1,el-select組件中,必須要寫入一個(gè)el-option組件, 可以隱藏, 但必須存在2,選中的數(shù)據(jù)響應(yīng)式綁定的其實(shí)是級(jí)聯(lián)面板的數(shù)據(jù),同步到了select中,并且滿足其展示的內(nèi)容,比如“已選中2項(xiàng)”
<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(); // 初始化(只展示一級(jí)節(jié)點(diǎn))
}
},
},
// 監(jiān)聽級(jí)聯(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(); // 初始化(只展示一級(jí)節(jié)點(diǎn))
} else {
this.selectModuleData = `已選${newVal.length}項(xiàng)`;
}
},
},
},
/// methods
// 級(jí)聯(lián)選擇器全選, 其中moduleArray表示的是級(jí)聯(lián)面板綁定的數(shù)據(jù),表示如果此時(shí)沒有全選的話那就將所有的數(shù)據(jù),賦值到級(jí)聯(lián)面板中,這樣在顯示中,就表示全選的狀態(tài)。
cascaderAllSelect() {
if (this.cascaderModuleData.length !== this.moduleArray.length) {
this.cascaderModuleData = this.moduleArray;
}
},
// 直接獲取級(jí)聯(lián)面板的數(shù)據(jù)cascaderModuleData, 作為參數(shù)提交即可到此這篇關(guān)于如何使用el-cascader組件寫下拉級(jí)聯(lián)多選及全選功能的文章就介紹到這了,更多相關(guān)el-cascader下拉級(jí)聯(lián)多選內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue2.x 項(xiàng)目性能優(yōu)化之代碼優(yōu)化的實(shí)現(xiàn)
這篇文章主要介紹了Vue2.x 項(xiàng)目性能優(yōu)化之代碼優(yōu)化的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
解決VUE框架 導(dǎo)致綁定事件的阻止冒泡失效問(wèn)題
下面小編就為大家分享一篇vue監(jiān)聽滾動(dòng)事件 實(shí)現(xiàn)某元素吸頂或者固定位置顯示方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
Vue 動(dòng)態(tài)設(shè)置路由參數(shù)的案例分析
這篇文章主要介紹了Vue 動(dòng)態(tài)設(shè)置路由參數(shù)的案例分析,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-04-04
Vue獲取當(dāng)前系統(tǒng)日期(年月日)的示例代碼
發(fā)中會(huì)有要獲取當(dāng)前日期的需求,有的是獲取到當(dāng)前月份,有的是精確到分秒,在 Vue 開發(fā)中,獲取當(dāng)前時(shí)間是一項(xiàng)常見的需求,本文將深入探討Vue獲取當(dāng)前系統(tǒng)日期(年月日),幫助您更好地利用當(dāng)前時(shí)間,需要的朋友可以參考下2024-01-01
element中async-validator異步請(qǐng)求驗(yàn)證使用
本文主要介紹了element中async-validator異步請(qǐng)求驗(yàn)證使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
vue如何解決數(shù)據(jù)加載時(shí),插值表達(dá)式閃爍問(wèn)題
這篇文章主要介紹了vue如何解決數(shù)據(jù)加載時(shí),插值表達(dá)式閃爍問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
element plus中el-upload實(shí)現(xiàn)上傳多張圖片的示例代碼
最近寫項(xiàng)目的時(shí)候需要一次上傳多張圖片,本文主要介紹了element plus中el-upload實(shí)現(xiàn)上傳多張圖片的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01

