element-ui中實現tree子節(jié)點部分選中時父節(jié)點也選中
子節(jié)點部分選中時父節(jié)點也選中
如果需求是:選中任何一個子節(jié)點都默認選擇父節(jié)點,怎么辦?
其實,element-ui也提供了方案,常規(guī)下,如果子節(jié)點選中,那么這時父節(jié)點是半選中狀態(tài),在獲取選中值時,只需要利用**getHalfCheckedKeys()+getCheckedKeys()**兩個方法即可達到效果。
?let zi = this.$refs.tree.getCheckedKeys()//返回選中子節(jié)點的key ?let fu =this.$refs.tree.getHalfCheckedKeys()//返回選中子節(jié)點的父節(jié)點的key ?let new1 = zi.concat(fu)
el-tree數據回顯時子節(jié)點部分選中,父節(jié)點都全選中的坑
el-tree 在編輯中回顯數據時,有一個bug,就是只要我們回顯的數據中有父節(jié)點的 id,不管當前父節(jié)點下的子節(jié)點是部分選中還是全選中,回顯的效果是該父子節(jié)點下的子節(jié)點都會全選中,這很顯然不是我們需要的
看大家有用自己的辦法解決,比如有說用 check-strictly 來控制父子互不互相關聯的做法,還有自己手動寫函數來控制父子節(jié)點的選中狀態(tài),但是方法多感覺很繁瑣。
我這里用getNode()的方法來簡單解決
預計的效果
目前實際效果
先上代碼看如何實現
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 () { // 默認選中 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 是從后端獲取回來的數據,getNode() 獲取到當前節(jié)點,判斷當前節(jié)點是否是葉子節(jié)點,是的話存入 arr 數組中,最后使用 setCheckedKeys() 將數據回顯選中,從而實現父級的半選狀態(tài)
打印了一下Node 節(jié)點
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
解決elementUI 切換tab后 el_table 固定列下方多了一條線問題
這篇文章主要介紹了解決elementUI 切換tab后 el_table 固定列下方多了一條線問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07vue-cli3項目配置eslint代碼規(guī)范的完整步驟
這篇文章主要給大家介紹了關于vue-cli3項目配置eslint代碼規(guī)范的完整步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09