element-ui中實(shí)現(xiàn)tree子節(jié)點(diǎn)部分選中時父節(jié)點(diǎn)也選中
子節(jié)點(diǎn)部分選中時父節(jié)點(diǎn)也選中
如果需求是:選中任何一個子節(jié)點(diǎn)都默認(rèn)選擇父節(jié)點(diǎn),怎么辦?
其實(shí),element-ui也提供了方案,常規(guī)下,如果子節(jié)點(diǎn)選中,那么這時父節(jié)點(diǎn)是半選中狀態(tài),在獲取選中值時,只需要利用**getHalfCheckedKeys()+getCheckedKeys()**兩個方法即可達(dá)到效果。
?let zi = this.$refs.tree.getCheckedKeys()//返回選中子節(jié)點(diǎn)的key ?let fu =this.$refs.tree.getHalfCheckedKeys()//返回選中子節(jié)點(diǎn)的父節(jié)點(diǎn)的key ?let new1 = zi.concat(fu)
el-tree數(shù)據(jù)回顯時子節(jié)點(diǎn)部分選中,父節(jié)點(diǎn)都全選中的坑
el-tree 在編輯中回顯數(shù)據(jù)時,有一個bug,就是只要我們回顯的數(shù)據(jù)中有父節(jié)點(diǎn)的 id,不管當(dāng)前父節(jié)點(diǎn)下的子節(jié)點(diǎn)是部分選中還是全選中,回顯的效果是該父子節(jié)點(diǎn)下的子節(jié)點(diǎn)都會全選中,這很顯然不是我們需要的
看大家有用自己的辦法解決,比如有說用 check-strictly 來控制父子互不互相關(guān)聯(lián)的做法,還有自己手動寫函數(shù)來控制父子節(jié)點(diǎn)的選中狀態(tài),但是方法多感覺很繁瑣。
我這里用getNode()的方法來簡單解決
預(yù)計的效果

目前實(shí)際效果

先上代碼看如何實(shí)現(xiàn)
template 部分
<el-tree :data="list.data" show-checkbox node-key="id" :props="defaultProps" :default-expand-all="list.isExpand" v-loading="list.loading" ref="tree" @check-change="checkChange"> </el-tree>
js 部分
export default {
data () {
return {
list: {
data: [],
loading: false,
isExpand: true
},
defaultProps: {
children: 'children',
label: 'name'
},
loading:false
}
},
methods: {
defaultChecked () { // 默認(rèn)選中
this.$nextTick(() => {
const arr = []
this.menus.forEach(item => {
if (!this.$refs.tree.getNode(item.id).childNodes || !this.$refs.tree.getNode(item.id).childNodes.length) {
arr.push(item.id)
}
})
this.$refs.tree.setCheckedKeys(arr)
})
},
}
}

解析:this.menus 是從后端獲取回來的數(shù)據(jù),getNode() 獲取到當(dāng)前節(jié)點(diǎn),判斷當(dāng)前節(jié)點(diǎn)是否是葉子節(jié)點(diǎn),是的話存入 arr 數(shù)組中,最后使用 setCheckedKeys() 將數(shù)據(jù)回顯選中,從而實(shí)現(xiàn)父級的半選狀態(tài)
打印了一下Node 節(jié)點(diǎn)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決elementUI 切換tab后 el_table 固定列下方多了一條線問題
這篇文章主要介紹了解決elementUI 切換tab后 el_table 固定列下方多了一條線問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
Vue2中使用axios的3種方法實(shí)例總結(jié)
axios從功能上來說就是主要用于我們前端向后端發(fā)送請求,是基于http客戶端的promise,面向?yàn)g覽器和nodejs,下面這篇文章主要給大家介紹了關(guān)于Vue2中使用axios的3種方法,需要的朋友可以參考下2022-09-09
vue實(shí)現(xiàn)商品詳情頁功能之商品選項(xiàng)卡
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)商品詳情頁功能之商品選項(xiàng)卡,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-04-04
vue-cli3項(xiàng)目配置eslint代碼規(guī)范的完整步驟
這篇文章主要給大家介紹了關(guān)于vue-cli3項(xiàng)目配置eslint代碼規(guī)范的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
vue2+tracking實(shí)現(xiàn)PC端的人臉識別示例
本文主要介紹了vue2+tracking實(shí)現(xiàn)PC端的人臉識別示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05
Vue.js 實(shí)現(xiàn)微信公眾號菜單編輯器功能(一)
最近vue.js 非?;馃幔【幰渤脵C(jī)學(xué)習(xí)了下vuejs的一些基礎(chǔ)知識,于是嘗試做一個像微信平臺里的菜單編輯器功能,下面腳本之家小編把vue.js 微信公眾號菜單編輯器功能的實(shí)現(xiàn)代碼分享給大家,需要的朋友參考下2018-05-05

