您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么使用el-select與el-tree實現(xiàn)樹形結(jié)構(gòu)多選框”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么使用el-select與el-tree實現(xiàn)樹形結(jié)構(gòu)多選框”吧!
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修改禁用后的鼠標狀態(tài),
.setstyle { min-height: 200px; padding: 0 !important; margin: 0; overflow: auto; cursor: default !important; }
通過el-tree來選擇所需要的節(jié)點和獲取數(shù)據(jù),將el-select的選擇關(guān)閉,防止點擊時報錯,通過el-tree獲取的數(shù)據(jù)來關(guān)聯(lián)el-select并渲染輸入框的內(nèi)容,而不是通過option來獲取數(shù)據(jù)(所以el-option的狀態(tài)時disabled)。
1.this.$refs.tree.getCheckedNodes() 獲取選中的節(jié)點
2.cursor:default 修改鼠標狀態(tài)
3.check-change 節(jié)點選中狀態(tài)發(fā)生變化時觸發(fā)
涉及內(nèi)容:
popper-append-to-body | 是否將彈出框插入至 body 元素。在彈出框的定位出現(xiàn)問題時,可將該屬性設(shè)置為 false | boolean |
show-checkbox | 節(jié)點是否可被選擇 | boolean |
check-strictly | 在顯示復選框的情況下,是否嚴格的遵循父子不互相關(guān)聯(lián)的做法,默認為 false | boolean |
expand-on-click-node | 是否在點擊節(jié)點的時候展開或者收縮節(jié)點, 默認值為 true,如果為 false,則只有點箭頭圖標的時候才會展開或者收縮節(jié)點。 | boolean |
check-on-click-node | 是否在點擊節(jié)點的時候選中節(jié)點,默認值為 false,即只有在點擊復選框時才會選中節(jié)點。 | boolean |
第二版修改:
在之前的基礎(chǔ)上進行了優(yōu)化,增加了刪除的功能,
原來的刪除中,數(shù)組件不會跟隨修改,這次優(yōu)化后,使組件功能更加完善。
思路:
通過刪除已選模塊時觸發(fā)的方法,對樹組件中數(shù)據(jù)選擇情況進行重新修改渲染,觸發(fā)清空時,將已選數(shù)據(jù)置空,并且把樹組件中已選項全部修改為未選。
涉及內(nèi)容:
getCheckedNodes | 若節(jié)點可被選擇(即 show-checkbox 為 true ),則返回目前被選中的節(jié)點所組成的數(shù)組 | (leafOnly, includeHalfChecked) 接收兩個 boolean 類型的參數(shù),1. 是否只是葉子節(jié)點,默認值為 false 2. 是否包含半選節(jié)點,默認值為 false |
setCheckedNodes | 設(shè)置目前勾選的節(jié)點,使用此方法必須設(shè)置 node-key 屬性 | (nodes) 接收勾選節(jié)點數(shù)據(jù)的數(shù)組 |
node-key | 每個樹節(jié)點用來作為唯一標識的屬性,整棵樹應(yīng)該是唯一的 | String |
remove-tag | 多選模式下移除tag時觸發(fā) | 移除的tag值 |
clear | 可清空的單選模式下用戶點擊清空按鈕時觸發(fā) | — |
collapse-tags | 多選時是否將選中值按文字的形式展示 | boolean |
設(shè)置collapse-tags后,展示效果:
上圖箭頭所指向的模塊是通過getCheckedNodes獲取到的列表中的第一個元素,所以上面刪除方法中使用了splice(0,1)來進行刪除。
感謝各位的閱讀,以上就是“怎么使用el-select與el-tree實現(xiàn)樹形結(jié)構(gòu)多選框”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對怎么使用el-select與el-tree實現(xiàn)樹形結(jié)構(gòu)多選框這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。