el-select與el-tree結(jié)合使用實(shí)現(xiàn)樹形結(jié)構(gòu)多選框
前言
接上篇文章需求,選擇樹形結(jié)構(gòu)的時(shí)候有多選的情況,用上一篇的單選并不能解決問題,下圖是這次達(dá)到的效果

話不多說,上代碼
html
<el-select v-model="value" multiple placeholder="請選擇" :popper-append-to-body="false"
@remove-tag="removetag" collapse-tags @clear="clearall" clearable >
<el-option :value="selectTree" class="setstyle" disabled>
<el-tree :data="list" :props="defaultProps" ref="tree"
show-checkbox check-strictly :expand-on-click-node="false" node-key="id"
check-on-click-node @check-change="handleNodeClick"></el-tree>
</el-option>
</el-select>js
<script>
export default {
data() {
return {
value:[],
selectTree:[],
defaultProps:{
children: 'children',
label: 'label'
},
list: [{
id: 1,
label: '一級 2',
children: [{
id: 3,
label: '二級 2-1',
children: [{
id: 4,
label: '三級 3-1-1'
}, {
id: 5,
label: '三級 3-1-2',
}]
}, {
id: 2,
label: '二級 2-2',
children: [{
id: 6,
label: '三級 3-2-1'
}, {
id: 7,
label: '三級 3-2-2',
}]
}]
}],
}
},
methods: {
handleNodeClick(data,self,child) {
console.log(this.$refs.tree.getCheckedNodes())
let datalist = this.$refs.tree.getCheckedNodes()
this.selectTree = [] //置空
this.value = []
datalist.forEach((item)=>{
this.selectTree.push({id:item.id,label:item.label})
this.value.push(item.label)
})
},
removetag(){
this.selectTree.splice(0,1)
let setlist = this.$refs.tree.getCheckedNodes()
setlist.splice(0,1)
this.$nextTick(() => {
this.$refs.tree.setCheckedNodes(setlist)
})
},
clearall(){
this.selectTree = []
this.$nextTick(() => {
this.$refs.tree.setCheckedNodes([])
})
},
},
}
</script>css 糾正樣式問題,其中cursor修改禁用后的鼠標(biāo)狀態(tài),
.setstyle {
min-height: 200px;
padding: 0 !important;
margin: 0;
overflow: auto;
cursor: default !important;
}思路:
通過el-tree來選擇所需要的節(jié)點(diǎn)和獲取數(shù)據(jù),將el-select的選擇關(guān)閉,防止點(diǎn)擊時(shí)報(bào)錯(cuò),通過el-tree獲取的數(shù)據(jù)來關(guān)聯(lián)el-select并渲染輸入框的內(nèi)容,而不是通過option來獲取數(shù)據(jù)(所以el-option的狀態(tài)時(shí)disabled)。
重點(diǎn):
1.this.$refs.tree.getCheckedNodes() 獲取選中的節(jié)點(diǎn)
2.cursor:default 修改鼠標(biāo)狀態(tài)
3.check-change 節(jié)點(diǎn)選中狀態(tài)發(fā)生變化時(shí)觸發(fā)
涉及內(nèi)容:
| popper-append-to-body | 是否將彈出框插入至 body 元素。在彈出框的定位出現(xiàn)問題時(shí),可將該屬性設(shè)置為 false | boolean |
| show-checkbox | 節(jié)點(diǎn)是否可被選擇 | boolean |
| check-strictly | 在顯示復(fù)選框的情況下,是否嚴(yán)格的遵循父子不互相關(guān)聯(lián)的做法,默認(rèn)為 false | boolean |
| expand-on-click-node | 是否在點(diǎn)擊節(jié)點(diǎn)的時(shí)候展開或者收縮節(jié)點(diǎn), 默認(rèn)值為 true,如果為 false,則只有點(diǎn)箭頭圖標(biāo)的時(shí)候才會(huì)展開或者收縮節(jié)點(diǎn)。 | boolean |
| check-on-click-node | 是否在點(diǎn)擊節(jié)點(diǎn)的時(shí)候選中節(jié)點(diǎn),默認(rèn)值為 false,即只有在點(diǎn)擊復(fù)選框時(shí)才會(huì)選中節(jié)點(diǎn)。 | boolean |
第二版修改:
在之前的基礎(chǔ)上進(jìn)行了優(yōu)化,增加了刪除的功能,
原來的刪除中,數(shù)組件不會(huì)跟隨修改,這次優(yōu)化后,使組件功能更加完善。
思路:
通過刪除已選模塊時(shí)觸發(fā)的方法,對樹組件中數(shù)據(jù)選擇情況進(jìn)行重新修改渲染,觸發(fā)清空時(shí),將已選數(shù)據(jù)置空,并且把樹組件中已選項(xiàng)全部修改為未選。
涉及內(nèi)容:
| getCheckedNodes | 若節(jié)點(diǎn)可被選擇(即 show-checkbox 為 true),則返回目前被選中的節(jié)點(diǎn)所組成的數(shù)組 | (leafOnly, includeHalfChecked) 接收兩個(gè) boolean 類型的參數(shù),1. 是否只是葉子節(jié)點(diǎn),默認(rèn)值為 false 2. 是否包含半選節(jié)點(diǎn),默認(rèn)值為 false |
| setCheckedNodes | 設(shè)置目前勾選的節(jié)點(diǎn),使用此方法必須設(shè)置 node-key 屬性 | (nodes) 接收勾選節(jié)點(diǎn)數(shù)據(jù)的數(shù)組 |
| node-key | 每個(gè)樹節(jié)點(diǎn)用來作為唯一標(biāo)識(shí)的屬性,整棵樹應(yīng)該是唯一的 | String |
| remove-tag | 多選模式下移除tag時(shí)觸發(fā) | 移除的tag值 |
| clear | 可清空的單選模式下用戶點(diǎn)擊清空按鈕時(shí)觸發(fā) | — |
| collapse-tags | 多選時(shí)是否將選中值按文字的形式展示 | boolean |
設(shè)置collapse-tags后,展示效果:

上圖箭頭所指向的模塊是通過getCheckedNodes獲取到的列表中的第一個(gè)元素,所以上面刪除方法中使用了splice(0,1)來進(jìn)行刪除。
總結(jié)
到此這篇關(guān)于el-select與el-tree結(jié)合使用實(shí)現(xiàn)樹形結(jié)構(gòu)多選框的文章就介紹到這了,更多相關(guān)el-select el-tree樹形結(jié)構(gòu)多選框內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue監(jiān)聽滾動(dòng)事件實(shí)現(xiàn)滾動(dòng)監(jiān)聽
本文主要介紹了vue監(jiān)聽滾動(dòng)事件實(shí)現(xiàn)滾動(dòng)監(jiān)聽的相關(guān)資料。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-04-04
vue在antDesign框架或elementUI框架組件native事件中觸發(fā)2次問題
這篇文章主要介紹了vue在antDesign框架或elementUI框架組件native事件中觸發(fā)2次問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04
vue中使用echarts實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)綁定以及獲取后端接口數(shù)據(jù)
總結(jié)一下自己最近項(xiàng)目中用echarts動(dòng)態(tài)獲取接口數(shù)據(jù)并畫圖的方法,下面這篇文章主要給大家介紹了關(guān)于vue中使用echarts實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)綁定以及獲取后端接口數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2022-07-07
antd vue 刷新保留當(dāng)前頁面路由,保留選中菜單,保留menu選中操作
這篇文章主要介紹了antd vue 刷新保留當(dāng)前頁面路由,保留選中菜單,保留menu選中操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
vue文件上傳Required request part ‘file‘ is&n
這篇文章主要介紹了vue文件上傳Required request part ‘file‘ is not present問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
詳解vue使用vue-layer-mobile組件實(shí)現(xiàn)toast,loading效果
這篇文章主要介紹了詳解vue使用vue-layer-mobile組件實(shí)現(xiàn)toast,loading效果,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08
vue3引入uview-plus3.0移動(dòng)組件庫的流程
這篇文章主要介紹了vue3引入uview-plus3.0移動(dòng)組件庫的流程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06

