代码编织梦想

filter-node-method 的逻辑不需要变动

以下为我的html结构

        <div>
            <el-input placeholder="输入关键字进行过滤" v-model="filterText"> </el-input>
            <el-checkbox style="margin-top: 10px" v-model="treeChecked" @change="treeCheckedChange"
                >全选/反选</el-checkbox
            >

            <el-tree
                v-loading="treeLoading"
                class="tree"
                ref="tree"
                :props="defaultProps"
                :data="list"
                node-key="id"
                show-checkbox
                @check="currentChecked"
                :filter-node-method="filterNode"
                :default-checked-keys="form.cardIDs"
                :default-expanded-keys="form.cardIDs"
            >
            </el-tree>
        </div>

我通过判断 treeChecked  是否选中

以下为data部分

    data() {
        return {
            // 筛选内容
            filterText: "",
            defaultProps: {
                label: "name"
            },
            list: [],
            // 全选/反选
            treeChecked: false,
            form: {
                // 选中的值
                cardIDs: [],
                managerID: "" //当前用户
            },
            loading: false,
            // 回显加载
            treeLoading: false,
   
        }
    },

filterText 为筛选的值

list 为全部数据

以下我们直接上重点,逻辑都在全选/反选按钮中

        treeCheckedChange() {
            // 全选
            if (this.treeChecked) {
                // 获取当前筛选文本
                const filter = this.filterText.toLowerCase() //toLowerCase转为小写  保证了匹配不区分大小写
                // 筛选出可见节点的 ID
                const visibleKeys = this.list
                    .filter(item => item.name.toLowerCase().includes(filter))
                    .map(item => item.id)

                // 设置选中状态
                this.$refs.tree.setCheckedKeys(visibleKeys)
                this.$nextTick(() => {
                    this.currentChecked(this.$refs.tree.getCheckedNodes(), {
                        checkedKeys: visibleKeys // 更新为筛选后的节点
                    })
                })
            } else {
                this.$refs.tree.setCheckedKeys([])
                this.form.cardIDs = []
            }
        }

在全选反选逻辑中,发现有 currentChecked 事件,也就是选中,每次选中的值,我都会赋值到 form.cardIDs 中,

  // 选中
        currentChecked(nodeObj, SelectedObj) {
            this.form.cardIDs = SelectedObj.checkedKeys
            // console.log(SelectedObj.checkedNodes) // 这是选中的节点数组
        },

以下为 js 完整代码

 data() {
        return {
            // 筛选内容
            filterText: "",
            defaultProps: {
                label: "name"
            },
            list: [],
            // 全选/反选
            treeChecked: false,
            form: {
                // 选中的值
                cardIDs: [],
                managerID: "" //当前用户
            },
            loading: false,
            // 回显加载
            treeLoading: false,
        
        }
    },



    methods: {
  
        // 取消
        cancel() {
            this.close()
        },
        close() {
            this.form.cardIDs = []
            this.$refs.tree.setCheckedKeys([])
            this.$emit("update:dialogVisible", false)
            this.treeChecked = false
        },
        // 选中
        currentChecked(nodeObj, SelectedObj) {
            this.form.cardIDs = SelectedObj.checkedKeys
            // console.log(SelectedObj.checkedNodes) // 这是选中的节点数组
        },
        // 筛选
        filterNode(value, data) {
            if (!value) return true
            // console.log("帅选!!", data.name.indexOf(value))

            return data.name.indexOf(value) !== -1
        },
        treeCheckedChange() {
            // 全选
            if (this.treeChecked) {
                // 获取当前筛选文本
                const filter = this.filterText.toLowerCase() //toLowerCase转为小写  保证了匹配不区分大小写
                // 筛选出可见节点的 ID
                const visibleKeys = this.list
                    .filter(item => item.name.toLowerCase().includes(filter))
                    .map(item => item.id)

                // 设置选中状态
                this.$refs.tree.setCheckedKeys(visibleKeys)
                this.$nextTick(() => {
                    this.currentChecked(this.$refs.tree.getCheckedNodes(), {
                        checkedKeys: visibleKeys // 更新为筛选后的节点
                    })
                })
            } else {
                this.$refs.tree.setCheckedKeys([])
                this.form.cardIDs = []
            }
        }
    },
    watch: {
        // 筛选
        filterText(val) {
            this.$refs.tree.filter(val)
        }

    }
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/nbclasszj/article/details/141258282

elementui tree 节点过滤加载对应子节点-爱代码爱编程

element-ui tree 节点过滤加载对应子节点方法,官网例子,不会返回过滤节点 的子节点的解决办法 转载地址:https://www.jianshu.com/p/ae50ce022f2b filterNode(va

el-tree 默认选择几个节点,却全选中了-爱代码爱编程

场景:某一级目录下有几个二级目录,当选中二级目录中的某一项并提交到后台后,页面渲染时却选中了整个一级目录,但是数据却是正常的一条二级目录。 解决办法: 比对该目录下未提交的目录,并将其checked设为false,这种方法能解决二级目录全选中的问题,但是会出现另一个小问题,虽然二级目录选择状态正常了,但是一级目录依然是全选中状态,如下: 所以

element tree ui 全选_element-ui避坑: el-tree控件中子节点未全部选中,父节点id没有选中并获取。...-爱代码爱编程

SQA报告的测试bug中出现了一个问题,就是element-ui中el-tree控件中子节点未全部选中时,父节点的id在提交时不会传给后台接口,导致后台获取不到父节点id,从而导致部分选中的子节点的所对应的用户权限功能不能使用。 分析问题: :data="pageAuthorityData" show-checkbox default-ex

# el-tree过滤后树形全选问题_deep_hate的博客-爱代码爱编程

el-tree过滤后树形全选问题 el-tree过滤后点击一个父节点依旧会把它下面的所有显示或不显示的子节点全部勾选上,我希望只会勾选上当前父节点下显示的子节点,所以做出了如下修改。 给组件绑定方法 @check-chan

el-tree 过滤后/搜索后 的 全选问题_有蝉的博客-爱代码爱编程

el-tree的数据在使用“filter-node-method”的方法之后,如何只选中筛选后的子节点 主要使用el-tree提供的@check来实现。  <el-input v-model="filterText" style="margin-top: 10px"

el-tree过滤后树形全选问题-爱代码爱编程

el-tree过滤后树形全选问题 el-tree过滤后树形全选问题 vue3、element plus 使用el-tree组件时,如果启用了 复选框 ,通过 filter-node-method 方法过滤后点击一个父节

树多选搜索查询,搜索后选中状态仍保留-爱代码爱编程

<template> <div class="half-transfer"> <div class="el-transfer-panel"> <div> <el-checkbox v-model="selectAll" @change="handleSelec

el-爱代码爱编程

1.功能描述:现在需要将el-tree勾选选择的数据回显得到另外一个树形结构。使用getCheckedNodes方法获得的数据中返回了所有勾选的节点,数据中子节点与父节点重复选中。所以通过判断parentId是否已选中过滤掉重复的子节点。(注:数据中包含parentId,若数据中无parentId可通过5中方法添加parentId) 2.getCheck

el-爱代码爱编程

<el-tree class="filter-tree" :data="data" :props="defaultProps" default-expand-all :filte

el-爱代码爱编程

el-tree的数据是用内部实现的一个node-store存储的,没有直接对外提供过滤后的数据,但是可以通过refs拿到带visible属性的所有节点数据:this.$refs.tree.store.root.childNo

element tree 树形控件 父节点默认勾选,子节点的数据全部选中_树形列表默认点击节点-爱代码爱编程

需求,后台权限控制 , 前端传递给后端勾选中的 节点id , 后端返回树状结构数据.每个对象中有一个字段来标识是否勾选,由于传给后端的时候也需要把父节点的id传递过去.等到下次弹窗打开需要默认勾选中已经绑定过得权限节点,但是遍历后端数据,我把父节点的id 和 按钮权限的 id 都存入到一个数组中,导致组件接收到父级节点的id时,下面的子节点全部勾选.​​​

如何获取懒加载后的el-爱代码爱编程

如何获取懒加载后的el-tree全部数据 场景:使用element-ui的el-tree的懒加载模式,在数据懒加载形成树形结构后,要求获取整个树的数据(treeList),el-tree的懒加载是不绑定data,此时是没法拿到实际的树的数据。 解决方案一:自己定义一个存在树形数据的数组treeList,在每次懒加载的relsove的时候,把对应的数据也

vue的elementui的el-爱代码爱编程

有一棵树型的数据,需要实现:在外部加一个 全选和不全选的按钮,去全部勾选树结构里面每一项的选框。 当点击勾选全选的时候,树的每一项都勾选; 当取消全选的时候,树的每一项都不勾选; 当选树的其中一项时,全选按钮是半选状态; 实现效果如下: <template> <div class="app-container ve