element-ui?tree?手動(dòng)展開(kāi)功能實(shí)現(xiàn)(異步樹(shù)也可以)
背景
項(xiàng)目中用到了vue的element-ui框架,用到了el-tree組件。由于數(shù)據(jù)量很大,使用了數(shù)據(jù)懶加載模式,即異步樹(shù)。異步樹(shù)采用復(fù)選框進(jìn)行結(jié)點(diǎn)選擇的時(shí)候,沒(méi)法自動(dòng)展開(kāi),官方文檔找了半天也沒(méi)有找到好的辦法! 找不到相關(guān)的配置,或者方法可以使用。 經(jīng)過(guò)調(diào)試與閱讀elment-ui源碼才發(fā)現(xiàn)有現(xiàn)成的方法可以進(jìn)行結(jié)點(diǎn)展開(kāi)。下面就介紹結(jié)點(diǎn)展開(kāi)的實(shí)現(xiàn)!
1.監(jiān)聽(tīng)復(fù)選框點(diǎn)擊事件check
<el-tree
:props="mulprops"
:load="loadNode"
lazy
node-key="id"
show-checkbox
accordion
@current-change="currentChange"
:filter-node-method="filterNode"
@check="handleCheck"
ref="tree"
:default-checked-keys="defaultCheckedNodes"
:default-expanded-keys="defaultExpandedNodes">
</el-tree>2.手動(dòng)展開(kāi),使用node.expand()方法
handleCheck(nodeData, treeChecked) {
let node = this.$refs.tree.getNode(nodeData.id)
//將選中的未展開(kāi)的節(jié)點(diǎn)進(jìn)行展開(kāi)
if(node.checked && !node.expanded){
node.expand(function(){
for(let i=0; i< node.childNodes.length; i++){
node.childNodes[i].expand()
}
})
}
}項(xiàng)目中的實(shí)現(xiàn)
(復(fù)選框勾選后能自動(dòng)展開(kāi)并選中,先展開(kāi)再勾選也可以自動(dòng)展開(kāi))
1.監(jiān)聽(tīng)check-change事件
<el-tree
:props="mulprops"
:load="loadNode"
lazy
node-key="id"
show-checkbox
accordion
@check-change="handleCheckChange"
:filter-node-method="filterNode"
ref="tree"
:default-checked-keys="defaultCheckedNodes"
:default-expanded-keys="defaultExpandedNodes"
>
</el-tree>2.編寫(xiě)展開(kāi)結(jié)點(diǎn)方法
handleCheckChange(nodeData, nodeSelected) {
//展開(kāi)選中的未展開(kāi)的節(jié)點(diǎn)
let tree = this.$refs.tree;
let node = tree.getNode(nodeData.id)
//展開(kāi)選中的未展開(kāi)的節(jié)點(diǎn)
this.expandNotExpandNodes(node);
//具體業(yè)務(wù)實(shí)現(xiàn)
console.log(nodeData, nodeSelected)
},
//展開(kāi)選中的未展開(kāi)的節(jié)點(diǎn)
expandNotExpandNodes(node) {
let tree = this.$refs.tree;
if (node.checked && !node.expanded && !node.isLeaf) {
node.expand(function () {
let childNodes = node.childNodes;
for (let i = 0; i < childNodes.length; i++) {
let childNode = childNodes[i];
//手動(dòng)觸發(fā)check-change事件,事件處理函數(shù)中回繼續(xù)調(diào)用此函數(shù),形成遞歸展開(kāi)
tree.$emit('check-change', childNode.data, childNode.checked, childNode.indeterminate);
}
})
}
},到此這篇關(guān)于element-ui tree 手動(dòng)進(jìn)行展開(kāi)(異步樹(shù)也可以)的文章就介紹到這了,更多相關(guān)element-ui tree手動(dòng)展開(kāi)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
VUE中filters過(guò)濾器的兩種用法實(shí)例
vue中過(guò)濾器的作用可被用于一些常見(jiàn)的文本格式化,也就是修飾文本,但是文本內(nèi)容不會(huì)改變,下面這篇文章主要給大家介紹了關(guān)于VUE中filters過(guò)濾器的兩種用法,需要的朋友可以參考下2022-04-04
使用Vue.$set()或者Object.assign()修改對(duì)象新增響應(yīng)式屬性的方法
vue代碼中,只要在data對(duì)象里定義的對(duì)象,賦值后,任意一個(gè)屬性值發(fā)生變化,視圖都會(huì)實(shí)時(shí)變化,這篇文章主要介紹了使用Vue.$set()或者Object.assign()修改對(duì)象新增響應(yīng)式屬性,需要的朋友可以參考下2022-12-12
vue 2 實(shí)現(xiàn)自定義組件一到多個(gè)v-model雙向數(shù)據(jù)綁定的方法(最新推薦)
有時(shí)候我們需要對(duì)一個(gè)組件綁定自定義 v-model,以更方便地實(shí)現(xiàn)雙向數(shù)據(jù),例如自定義表單輸入控件,這篇文章主要介紹了vue 2 實(shí)現(xiàn)自定義組件一到多個(gè)v-model雙向數(shù)據(jù)綁定的方法,需要的朋友可以參考下2024-07-07
Vue-element-admin平臺(tái)側(cè)邊欄收縮控制問(wèn)題
這篇文章主要介紹了Vue-element-admin平臺(tái)側(cè)邊欄收縮控制問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
antd vue 如何調(diào)整checkbox默認(rèn)樣式
這篇文章主要介紹了antd vue 如何調(diào)整checkbox默認(rèn)樣式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
vue項(xiàng)目?jī)?yōu)化之通過(guò)keep-alive數(shù)據(jù)緩存的方法
本篇文章主要介紹了vue項(xiàng)目?jī)?yōu)化之通過(guò)keep-alive數(shù)據(jù)緩存的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
vue路由跳轉(zhuǎn)攜帶參數(shù)的方式總結(jié)
我們知道在vue中每個(gè)頁(yè)面都需要在路由中聲明,下面這篇文章主要給大家介紹了關(guān)于vue路由跳轉(zhuǎn)攜帶參數(shù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10

