vue中el-tree動(dòng)態(tài)初始默認(rèn)選中和全選實(shí)現(xiàn)方法
一、我們常用到element-ui組件中,Tree 樹形控件。


官網(wǎng)鏈接:Element - The world's most popular Vue UI framework
二、實(shí)現(xiàn)效果如下圖所示

涉及:1. 樹結(jié)構(gòu)轉(zhuǎn)換一維數(shù)組
2. 與全選關(guān)聯(lián)
3. 父子組件間傳值
<template>
<div>
//全選選擇框
<el-checkbox
v-model="checkAll"
:indeterminate="isIndeterminate"
@change="handleCheckAllChange"
>
全選
</el-checkbox>
<div style="margin: 15px 0" />
//可選擇層級(jí)框
<el-tree
ref="tree"
default-expand-all //是否默認(rèn)展開所有節(jié)點(diǎn) 默認(rèn)是false
show-checkbox //節(jié)點(diǎn)是否可被選擇
:data="menuOptions"
node-key="id" //每個(gè)樹節(jié)點(diǎn)用來(lái)作為唯一標(biāo)識(shí)的屬性,整棵樹應(yīng)該是唯一的
highlight-current
//默認(rèn)勾選的節(jié)點(diǎn)的 key 的數(shù)組,formmenu是從父組件拿到的值。在此組件中通過(guò)this.$refs.tree.getCheckedKeys();返回目前被選中的節(jié)點(diǎn)的 key 所組成的數(shù)組,傳給formmenu。
:default-checked-keys="formmenu"
:props="defaultProps"
/>
<div style="margin: 15px 0" />
</div>
</template>
<script>
import { getAllMenu } from '@/views/api/index'; //樹數(shù)據(jù)接口
export default {
props: {
formmenu: { //父組件傳值子組件
type: Array,
default: () => {
return [];
},
},
},
data() {
return {
checkAll: false,
menuOptions: [],
mydata: [],
defaultProps: {
children: 'children',
label: 'menuName',
},
isIndeterminate: false,
};
},
watch: {
formmenu() {
this.getTreeselect();
},
},
created() {
this.getTreeselect();
},
methods: {
getTreeselect() {
getAllMenu().then((response) => {
this.menuOptions = response.data || []; //從接口拿到樹數(shù)據(jù)
this.$nextTick(() => {
this.$refs.tree.setCheckedKeys(this.formmenu); //通過(guò) keys 設(shè)置目前勾選的節(jié)點(diǎn),使用此方法必須設(shè)置 node-key 屬性
this.mydata = this.convertTreeData(this.menuOptions);//因?yàn)橄旅嬉袛鄶?shù)組長(zhǎng)度,樹的結(jié)構(gòu)里包含children,所以要將其展開。
//與全選關(guān)聯(lián)起來(lái),判斷是否全部選中還是部分選中
let checkedCount = this.formmenu.length;
this.checkAll = checkedCount === this.mydata.length;
this.isIndeterminate =
checkedCount > 0 && checkedCount < this.mydata.length;
});
});
},
// tree 結(jié)構(gòu)轉(zhuǎn)化成一維數(shù)組
convertTreeData(menuOptions) {
for (let i = 0; i < menuOptions.length; i++) {
if (menuOptions[i].children != undefined) {
const temp = menuOptions[i].children;
delete menuOptions[i].children;
menuOptions = menuOptions.concat(temp);
}
}
return menuOptions;
},
handleCheckAllChange(val) {
if (this.checkAll) {
this.$refs.tree.setCheckedNodes(this.menuOptions);
} else {
this.$refs.tree.setCheckedKeys([]);
}
this.isIndeterminate = false;
},
},
};
</script>

三、關(guān)于key和node
大家可以參考官網(wǎng)文檔,寫的還是挺清楚的。


總結(jié)
到此這篇關(guān)于vue中el-tree動(dòng)態(tài)初始默認(rèn)選中和全選實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)el-tree動(dòng)態(tài)初始默認(rèn)選中全選內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- ElementUI中el-tree如何獲取每個(gè)節(jié)點(diǎn)點(diǎn)擊的選中狀態(tài)
- el-tree使用獲取當(dāng)前選中節(jié)點(diǎn)的父節(jié)點(diǎn)數(shù)據(jù)
- Element樹形控件el-tree懶加載并設(shè)置默認(rèn)展開和選中的效果
- 餓了么UI中el-tree樹節(jié)點(diǎn)選中高亮的兩種常用方式(highlight-current屬性)
- el-tree設(shè)置選中高亮/焦點(diǎn)高亮、選中節(jié)點(diǎn)加深背景及更改字體顏色等的方法
- vue2+elementUI的el-tree的選中、高亮、定位功能的實(shí)現(xiàn)
- 解決el-tree數(shù)據(jù)回顯時(shí)子節(jié)點(diǎn)部分選中父節(jié)點(diǎn)都全選中的坑
- el-tree限制選中個(gè)數(shù)的實(shí)例
相關(guān)文章
vue-router路由傳參及隱藏參數(shù)問(wèn)題
這篇文章主要介紹了vue-router路由傳參及隱藏參數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
查看當(dāng)前vue項(xiàng)目所需Node.js版本的方法
這篇文章主要大家介紹了查看當(dāng)前vue項(xiàng)目所需Node.js版本的方法,文章通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-11-11
vue實(shí)現(xiàn)路由鑒權(quán)和不同用戶登錄
這篇文章主要為大家詳細(xì)介紹了vue中實(shí)現(xiàn)路由鑒權(quán)和不同用戶登錄的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04
Vue滾動(dòng)頁(yè)面到指定位置的實(shí)現(xiàn)及避坑
這篇文章主要介紹了Vue滾動(dòng)頁(yè)面到指定位置的實(shí)現(xiàn)及避坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
Vue3+TS實(shí)現(xiàn)動(dòng)態(tài)路由權(quán)限的示例詳解
當(dāng)我們?cè)陂_發(fā)一個(gè)大型的前端應(yīng)用時(shí),動(dòng)態(tài)路由權(quán)限是一個(gè)必不可少的功能,本文將介紹如何使用Vue 3和TypeScript來(lái)實(shí)現(xiàn)動(dòng)態(tài)路由權(quán)限,希望對(duì)大家有所幫助2024-01-01
Vue3+Tsx給路由加切換動(dòng)畫時(shí)的踩坑及解決
這篇文章主要介紹了Vue3+Tsx給路由加切換動(dòng)畫時(shí)的踩坑及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
Vue3+Element?Plus使用svg加載iconfont的處理方法
這篇文章主要介紹了Vue3+Element?Plus使用svg加載iconfont的解決方案,本文詳細(xì)介紹了如何在Element?Plus中使用iconfont,簡(jiǎn)單的說(shuō)就是要將其封裝成SVG,并且支持動(dòng)態(tài)修改顏色,需要的朋友可以參考下2022-08-08

