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" /> //可選擇層級框 <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)用來作為唯一標(biāo)識的屬性,整棵樹應(yīng)該是唯一的 highlight-current //默認(rèn)勾選的節(jié)點(diǎn)的 key 的數(shù)組,formmenu是從父組件拿到的值。在此組件中通過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); //通過 keys 設(shè)置目前勾選的節(jié)點(diǎn),使用此方法必須設(shè)置 node-key 屬性 this.mydata = this.convertTreeData(this.menuOptions);//因?yàn)橄旅嬉袛鄶?shù)組長度,樹的結(jié)構(gòu)里包含children,所以要將其展開。 //與全選關(guān)聯(lián)起來,判斷是否全部選中還是部分選中 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)容請搜索腳本之家以前的文章或繼續(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)文章
查看當(dāng)前vue項(xiàng)目所需Node.js版本的方法
這篇文章主要大家介紹了查看當(dāng)前vue項(xiàng)目所需Node.js版本的方法,文章通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-11-11vue實(shí)現(xiàn)路由鑒權(quán)和不同用戶登錄
這篇文章主要為大家詳細(xì)介紹了vue中實(shí)現(xiàn)路由鑒權(quán)和不同用戶登錄的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04Vue滾動(dòng)頁面到指定位置的實(shí)現(xiàn)及避坑
這篇文章主要介紹了Vue滾動(dòng)頁面到指定位置的實(shí)現(xiàn)及避坑,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09Vue3+TS實(shí)現(xiàn)動(dòng)態(tài)路由權(quán)限的示例詳解
當(dāng)我們在開發(fā)一個(gè)大型的前端應(yīng)用時(shí),動(dòng)態(tài)路由權(quán)限是一個(gè)必不可少的功能,本文將介紹如何使用Vue 3和TypeScript來實(shí)現(xiàn)動(dòng)態(tài)路由權(quán)限,希望對大家有所幫助2024-01-01Vue3+Tsx給路由加切換動(dòng)畫時(shí)的踩坑及解決
這篇文章主要介紹了Vue3+Tsx給路由加切換動(dòng)畫時(shí)的踩坑及解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01Vue3+Element?Plus使用svg加載iconfont的處理方法
這篇文章主要介紹了Vue3+Element?Plus使用svg加載iconfont的解決方案,本文詳細(xì)介紹了如何在Element?Plus中使用iconfont,簡單的說就是要將其封裝成SVG,并且支持動(dòng)態(tài)修改顏色,需要的朋友可以參考下2022-08-08