element的el-tree多選樹(shù)(復(fù)選框)父子節(jié)點(diǎn)關(guān)聯(lián)不關(guān)聯(lián)
屬性check-strictly
官方文檔提供屬性check-strictly,在顯示復(fù)選框的情況下,是否嚴(yán)格的遵循父子不互相關(guān)聯(lián)的做法,默認(rèn)為 false。
而此屬性的意思是:
默認(rèn)false,父子關(guān)聯(lián)。有如下現(xiàn)象及問(wèn)題:
1、當(dāng)你通過(guò)函數(shù)設(shè)置勾選節(jié)點(diǎn)的時(shí)候,只要父節(jié)點(diǎn)被勾選子節(jié)點(diǎn)必會(huì)勾選上,即便設(shè)置勾選的list中無(wú)此子節(jié)點(diǎn)。
2、當(dāng)你點(diǎn)擊勾選復(fù)選框時(shí)候,若點(diǎn)擊父節(jié)點(diǎn),其下子節(jié)點(diǎn)全部統(tǒng)一跟隨父節(jié)點(diǎn)變化;若點(diǎn)擊子節(jié)點(diǎn),子節(jié)點(diǎn)部分勾選時(shí)父節(jié)點(diǎn)處于半選狀態(tài),子節(jié)點(diǎn)全部勾選時(shí)父節(jié)點(diǎn)選中,子節(jié)點(diǎn)全部不勾選時(shí)父節(jié)點(diǎn)未選中。
設(shè)置true,嚴(yán)格的遵循父子不互相關(guān)聯(lián)。
1、當(dāng)你通過(guò)函數(shù)設(shè)置勾選節(jié)點(diǎn)的時(shí)候,嚴(yán)格通過(guò)設(shè)置勾選的list中有無(wú)此節(jié)點(diǎn)來(lái)斷定是否勾選。
2、當(dāng)你點(diǎn)擊勾選復(fù)選框時(shí)候,無(wú)論點(diǎn)擊的哪個(gè)節(jié)點(diǎn)只會(huì)改變當(dāng)前節(jié)點(diǎn)的勾選狀態(tài),不存在半選狀態(tài)。
系統(tǒng)的角色菜單控制的問(wèn)題
問(wèn)題來(lái)了,在系統(tǒng)的角色菜單控制的時(shí)候,需要滿(mǎn)足以下條件:
1、當(dāng)通過(guò)函數(shù)設(shè)置勾選節(jié)點(diǎn)的時(shí)候,需要嚴(yán)格通過(guò)設(shè)置勾選的list中有無(wú)此節(jié)點(diǎn)來(lái)斷定是否勾選,即勾選父節(jié)點(diǎn)而不一定勾選全部子節(jié)點(diǎn)。
2、當(dāng)點(diǎn)擊勾選復(fù)選框時(shí)候,若點(diǎn)擊父節(jié)點(diǎn),其下子節(jié)點(diǎn)全部統(tǒng)一跟隨父節(jié)點(diǎn)變化。
3、當(dāng)點(diǎn)擊勾選復(fù)選框時(shí)候,若點(diǎn)擊子節(jié)點(diǎn),子節(jié)點(diǎn)部分勾選時(shí)父節(jié)點(diǎn)處于半選狀態(tài),子節(jié)點(diǎn)全部勾選時(shí)父節(jié)點(diǎn)選中,子節(jié)點(diǎn)全部不勾選時(shí)父節(jié)點(diǎn)未選中。
需求思考:
一、check-strictly=false,行不通
按照需要滿(mǎn)足的條件,明顯靠近將check-strictly設(shè)置為false,于是從check-strictly=false父子互相關(guān)聯(lián)的基礎(chǔ)入手,需要解決的問(wèn)題就是:
將尚未全部勾選的子節(jié)點(diǎn)對(duì)應(yīng)的父節(jié)點(diǎn)改為半勾選狀態(tài),但是查找文檔良久無(wú)果。
只有g(shù)etHalfCheckedKeys和getHalfCheckedNodes,并沒(méi)有設(shè)置成半勾選。
二、check-strictly=true,試一試
只能試一下將check-strictly設(shè)置為true,從check-strictly=true嚴(yán)格的遵循父子不互相關(guān)聯(lián)入手,需要解決的問(wèn)題就是:
1、當(dāng)點(diǎn)擊勾選復(fù)選框時(shí)候,若點(diǎn)擊父節(jié)點(diǎn),其下子節(jié)點(diǎn)全部統(tǒng)一跟隨父節(jié)點(diǎn)變化。
2、當(dāng)點(diǎn)擊勾選復(fù)選框時(shí)候,若點(diǎn)擊子節(jié)點(diǎn),子節(jié)點(diǎn)部分勾選時(shí)父節(jié)點(diǎn)處于半選狀態(tài),子節(jié)點(diǎn)全部勾選時(shí)父節(jié)點(diǎn)選中,子節(jié)點(diǎn)全部不勾選時(shí)父節(jié)點(diǎn)未選中。
而在嚴(yán)格的父子不互相關(guān)聯(lián)時(shí),點(diǎn)擊父子節(jié)點(diǎn)不會(huì)出現(xiàn)半選狀態(tài),也無(wú)法通過(guò)函數(shù)設(shè)置半選狀態(tài),無(wú)奈簡(jiǎn)化解決問(wèn)題:
1、當(dāng)點(diǎn)擊勾選復(fù)選框時(shí)候,若狀態(tài)為 選中 :
1.1、其所有 父節(jié)點(diǎn) (父節(jié)點(diǎn)、父節(jié)點(diǎn)的父節(jié)點(diǎn)以此類(lèi)推)全部統(tǒng)一跟隨當(dāng)前節(jié)點(diǎn)變化為 選中 。
1.2、其下 子節(jié)點(diǎn) 全部統(tǒng)一跟隨父節(jié)點(diǎn)變化為 選中 。
2、當(dāng)點(diǎn)擊勾選復(fù)選框時(shí)候,若狀態(tài)為 未選中 ,其下 子節(jié)點(diǎn) 全部統(tǒng)一跟隨父節(jié)點(diǎn)變化為 未選中 。
解決代碼:
1、el-tree標(biāo)簽屬性
<el-tree ref="tree" :data="treeMenus" :props="multiProps" :show-checkbox="true" node-key="menuId" highlight-current :expand-on-click-node="false" :default-checked-keys="checkedId" :check-strictly="true" @check="clickDeal">
node-key:每個(gè)樹(shù)節(jié)點(diǎn)用來(lái)作為唯一標(biāo)識(shí)的屬性,整棵樹(shù)應(yīng)該是唯一的。標(biāo)識(shí)節(jié)點(diǎn)唯一的鍵值名稱(chēng)。
default-checked-keys = checkedId:對(duì)應(yīng)el-tree多選樹(shù)組件初始化時(shí)默認(rèn)選中ID
check-strictly = true:是否嚴(yán)格的遵循父子不互相關(guān)聯(lián)的做法
check:當(dāng)復(fù)選框被點(diǎn)擊的時(shí)候觸發(fā)的方法
props:配置選項(xiàng),具體看下圖。

而根據(jù)后臺(tái)的返回,針對(duì):props=“multiProps”,我的配置為:
multiProps: {
children: 'childs',
label: 'name',
disabled: this.isDisabled
}
識(shí)別childs字段為子節(jié)點(diǎn)name為節(jié)點(diǎn)名稱(chēng),而默認(rèn)是識(shí)別children為子節(jié)點(diǎn)label為節(jié)點(diǎn)名稱(chēng)。
2、el-tree組件有變化時(shí)給多選樹(shù)重新賦值
updated () {
// 給多選樹(shù)設(shè)置默認(rèn)值
this.$refs.tree.setCheckedKeys(this.checkedId)
},
checkedId為勾選節(jié)點(diǎn)的數(shù)組,不區(qū)分父子節(jié)點(diǎn)。
3、復(fù)選框點(diǎn)擊時(shí)的特殊處理
clickDeal (currentObj, treeStatus) {
// 用于:父子節(jié)點(diǎn)嚴(yán)格互不關(guān)聯(lián)時(shí),父節(jié)點(diǎn)勾選變化時(shí)通知子節(jié)點(diǎn)同步變化,實(shí)現(xiàn)單向關(guān)聯(lián)。
let selected = treeStatus.checkedKeys.indexOf(currentObj.menuId) // -1未選中
// 選中
if (selected !== -1) {
// 子節(jié)點(diǎn)只要被選中父節(jié)點(diǎn)就被選中
this.selectedParent(currentObj)
// 統(tǒng)一處理子節(jié)點(diǎn)為相同的勾選狀態(tài)
this.uniteChildSame(currentObj, true)
} else {
// 未選中 處理子節(jié)點(diǎn)全部未選中
if (currentObj.childs.length !== 0) {
this.uniteChildSame(currentObj, false)
}
}
},
// 統(tǒng)一處理子節(jié)點(diǎn)為相同的勾選狀態(tài)
uniteChildSame (treeList, isSelected) {
this.$refs.tree.setChecked(treeList.menuId, isSelected)
for (let i = 0; i < treeList.childs.length; i++) {
this.uniteChildSame(treeList.childs[i], isSelected)
}
},
// 統(tǒng)一處理父節(jié)點(diǎn)為選中
selectedParent (currentObj) {
let currentNode = this.$refs.tree.getNode(currentObj)
if (currentNode.parent.key !== undefined) {
this.$refs.tree.setChecked(currentNode.parent, true)
this.selectedParent(currentNode.parent)
}
},
到此這篇關(guān)于element的el-tree多選樹(shù)(復(fù)選框)父子節(jié)點(diǎn)關(guān)聯(lián)不關(guān)聯(lián)的文章就介紹到這了,更多相關(guān)element el-tree多選樹(shù)不關(guān)聯(lián)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 關(guān)于extjs treepanel復(fù)選框選中父節(jié)點(diǎn)與子節(jié)點(diǎn)的問(wèn)題
- vue基于element-ui的三級(jí)CheckBox復(fù)選框功能的實(shí)現(xiàn)代碼
- vue+element UI實(shí)現(xiàn)樹(shù)形表格帶復(fù)選框的示例代碼
- vuejs+element UI table表格中實(shí)現(xiàn)禁用部分復(fù)選框的方法
- el-table?選中行與復(fù)選框相互聯(lián)動(dòng)的實(shí)現(xiàn)步驟
- Vue3+ElementUI 多選框中復(fù)選框和名字點(diǎn)擊方法效果分離方法
- 使用element組件table表格實(shí)現(xiàn)某條件下復(fù)選框無(wú)法勾選
- Vue el-table復(fù)選框全部勾選及勾選回顯功能實(shí)現(xiàn)
- el-table表格點(diǎn)擊該行任意位置時(shí)也勾選上其前面的復(fù)選框
相關(guān)文章
前端文件導(dǎo)出設(shè)置responseType為blob時(shí)遇到的問(wèn)題及解決
這篇文章主要給大家介紹了關(guān)于前端文件導(dǎo)出設(shè)置responseType為blob時(shí)遇到的問(wèn)題及解決方法,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09
vue3模塊創(chuàng)建runtime-dom源碼解析
這篇文章主要為大家介紹了vue3模塊創(chuàng)建runtime-dom源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Vue-Jest 自動(dòng)化測(cè)試基礎(chǔ)配置詳解
目前開(kāi)發(fā)大型應(yīng)用,測(cè)試是一個(gè)非常重要的環(huán)節(jié),而在 Vue 項(xiàng)目中做單元測(cè)試可以用 Jest,本文主要介紹了Vue-Jest 自動(dòng)化測(cè)試,感興趣的可以了解一下2021-07-07
vue-cli項(xiàng)目配置多環(huán)境的詳細(xì)操作過(guò)程
vue-cli 默認(rèn)只提供了 dev 和 prod 兩種環(huán)境。這篇文章主要介紹了vue-cli項(xiàng)目配置多環(huán)境的詳細(xì)操作過(guò)程,需要的朋友可以參考下2018-10-10
vue3封裝簡(jiǎn)易的vue-echarts問(wèn)題
這篇文章主要介紹了vue3封裝簡(jiǎn)易的vue-echarts問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
vue select組件的使用與禁用實(shí)現(xiàn)代碼
這篇文章主要介紹了vue--select組件的使用與禁用的實(shí)現(xiàn)代碼,非常不錯(cuò),具有參考借鑒價(jià)值 ,需要的朋友可以參考下2018-04-04
Vue源碼學(xué)習(xí)之關(guān)于對(duì)Array的數(shù)據(jù)偵聽(tīng)實(shí)現(xiàn)
這篇文章主要介紹了Vue源碼學(xué)習(xí)之關(guān)于對(duì)Array的數(shù)據(jù)偵聽(tīng)實(shí)現(xiàn),Vue使用了一個(gè)方式來(lái)實(shí)現(xiàn)Array類(lèi)型的監(jiān)測(cè)就是攔截器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04
vue中的虛擬dom知識(shí)點(diǎn)總結(jié)
這篇文章主要介紹了vue中的虛擬dom知識(shí)點(diǎn)總結(jié),文章圍繞主題內(nèi)容展開(kāi)詳細(xì)介紹,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助2022-04-04
npm安裝vue@cli報(bào)錯(cuò)的簡(jiǎn)單處理方式
最近工作中遇到了報(bào)錯(cuò),現(xiàn)在將解決的辦法分享給大家,下面這篇文章主要給大家介紹了關(guān)于npm安裝vue@cli報(bào)錯(cuò)的簡(jiǎn)單處理方式,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12

