IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> el-tree组件实现全选/不全选和展开/折叠功能 -> 正文阅读

[JavaScript知识库]el-tree组件实现全选/不全选和展开/折叠功能

全选/不全选

方法1

<template>部分
<div>
    <!-- 复选框,点击事件 -->
	<el-checkbox v-model="isSelectAll" @change="selectAll">全选/全不选</el-checkbox>
    <!-- 要操作的树组件,必须要有 ref,node-key-->
    <el-tree ref="myTree" 
             v-bind="myTree"
             node-key="id"
             show-checkbox
             :default-expand-all="isExpand"
             :filter-node-method="filterNode"
        />
</div>

<script>部分
export default {
    data(){
        return {
          myTree: {
            data: [],
            props: { children: 'children', label: 'name' }
          },
          // tree是否全选,复选框默认状态()
          isSelectAll: false
        }
    },
    methods: {
        // 加载树的数据
        getTreeData() {
          // 异步获取也好,固定数据也好,获得数据后先将树的子节点遍历出来
          this.myTree.data = xxx得到树的数据
          xxx其他操作
        },
        // 全选/不全选
        selectAll() {
            if (this.isSelectAll) {
                // 	设置目前勾选的节点,使用此方法必须设置 node-key 属性
               this.$refs.organizationData.setCheckedNodes(this.myTree.data);
            } else {
                // 全部不选中
                this.$refs.menuOrUserTree.setCheckedNodes([])
            }
        }
    }
}
:简单,好实现
:扩展性差,不够灵活

方法2

获取el-tree子节点,

<template>部分
<div>
    <!-- 复选框,点击事件 -->
	<el-checkbox v-model="isSelectAll" @change="selectAll">全选/全不选</el-checkbox>
    <!-- 要操作的树组件,必须要有 ref,node-key-->
    <el-tree ref="myTree" 
             v-bind="myTree"
             node-key="id"
             show-checkbox
             :default-expand-all="isExpand"
             :filter-node-method="filterNode"
        />
</div>

<script>
export default {
    data(){
        return {
          myTree: {
            data: [],
            props: { children: 'children', label: 'name' }
          },
          // 树所有可选择的子节点
          treeAllChildNode: [],
          // tree是否全选,复选框默认状态()
          isSelectAll: false
        }
    },
    methods: {
        // 加载树的数据
        getTreeData() {
          // 异步获取也好,固定数据也好,获得数据后先将树的子节点遍历出来
          this.myTree.data = xxx得到树的数据
          // 先清空 , 子节点信息
          this.treeAllChildNode = []
          // 获取树所有可选择的子节点
          this.getTreeAllChildNode(this.myTree.data)
          xxx其他操作
        },
        // 递归获取树所有可选择的子节点
        getTreeAllChildNode(treeData) {
          // 树长度为0 结束操作
          if (treeData.length === 0) {
            return
          }
          // 遍历树的数据
          for (let i = 0; i < treeData.length; i++) {
            // 当前遍历的数据是否还有子节点
            let children = treeData[i].children
            if (children && children.length > 0) {
              // 有,则递归
              this.getTreeAllChildNode(children)
            } else if (treeData[i].disabled === false) {
              // 没有,则判断当前节点是否是可选择状态
              // 将子节点id 追加给 treeAllChildNode (子节点数组也可声明为对象,将节点信息存储)
              this.treeAllChildNode.push(treeData[i].id)
            }
          }
        },
        // 全选/不全选
        selectAll() {
            if (this.isSelectAll) {
                // 遍历将子节点全选中
                for (let i = 0; i < this.treeAllChildNode.length; i++) {
                    this.$refs['menuOrUserTree'].setChecked(this.treeAllChildNode[i], true, false)
                }
            } else {
                // 全部不选中
                this.$refs.menuOrUserTree.setCheckedNodes([])
            }
        },
    }
}
:扩展性强(可自定义选中的数据,并且对不可选中的选项做筛选),可自定义选择
:写的多
注意事项

每次获取树数据需要对字节点数组(对象)进行清空

树(el-tree)一键展开和折叠

具体看代码

<template>部分

<div>
	<!-- 复选框,且带有点击事件 -->
    <el-checkbox v-model="isExpand" @change="expandAll">展开/折叠</el-checkbox>
	<!-- 操作的树组件 -->
    <el-tree ref="myTree" 
             v-bind="myTree"
             node-key="id"
             show-checkbox
             :default-expand-all="isExpand"
             :filter-node-method="filterNode"
        />
</div>

<script>部分

export default {
    data(){
        return {
          // tree是否展开
          isExpand: true
        }
    },
    methods: {
        // 展开/折叠
        expandAll() {
          for (var i = 0; i < this.$refs.myTree.store._getAllNodes().length; i++) {
            // 根据isExpand, tree展开或折叠
            this.$refs.myTree.store._getAllNodes()[i].expanded = this.isExpand
          }
        }
    }
}
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-29 12:02:02  更:2022-04-29 12:02:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:06:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码