elementUI的el-tree节点过滤事件

ElementUI树形控件节点过滤

最近用到了elementUI的节点过滤事件,效果如下,当输入关键字搜索的时候,它会将所有含有关键字的节点都显示出来。

这里写图片描述
这里写图片描述

废话不多说直接上代码:
1、:filter-node-method这个就是我们的过滤节点的函数,
2、filterText就是我们要过滤的内容
3、我这里给input设置了一个change事件,意味着,每次输入完值,就在该函数里调用过滤节点的方法
html

<el-input v-model="filterText" @change="filterChange"></el-input>
            <el-tree
                    ref="tree2"
                    node-key="nodeId"
                    :data="courseList"
                    :props="defaultProps"
                    @current-change="nodeClick"
                    highlight-current="true"
                    :default-expanded-keys="defaultCheckNode"
                    :default-checked-keys="defaultCheckNode"
                    :filter-node-method="filterNode"
            ></el-tree>

js

  filterNode:function (value,data) {
            if (!value) return true;
            return data.nodeName.indexOf(value) !== -1;
        },
        filterChange:function () {
            // 这里每当输入的数据有变化就触发原生的过滤节点这个函数
            this.$refs.tree2.filter(app.filterText);
        }

data数据

 filterText:"",

注意:这里的:filter-node-method方法,官网的文档说明
这里写图片描述

### ElementUI 中 `el-select` 组件树形结构回显的实现方法 在 Vue 和 ElementUI 开发中,当需要处理带有树形结构的数据并实现在 `el-select` 下拉框中进行选项回显时,可以按照以下方式进行设计和开发。 #### 数据准备 为了支持树形结构的选择器,通常会定义一个具有父子关系的对象数组作为数据源。例如: ```javascript const treeData = [ { id: '1', label: 'Node 1', children: [ { id: '1-1', label: 'Child Node 1' }, { id: '1-2', label: 'Child Node 2' } ] }, { id: '2', label: 'Node 2' } ]; ``` 此数据可以通过 API 动态获取或者静态配置[^1]。 #### 自定义过滤逻辑 由于标准的 `el-option` 不支持嵌套层次结构展示,因此需自定义渲染模板来适配树状节点。通过 `scoped-slot` 或者插槽扩展功能完成复杂 UI 表达需求的同时保持灵活性。 以下是具体代码片段演示如何构建带树形结构的可筛选下拉菜单组件: ```html <template> <div> <!-- 使用 el-cascader 来模拟树形 select --> <el-cascader v-model="selectedValue" :options="treeData" @change="handleChange" clearable></el-cascader> <!-- 如果坚持使用 el-select,则需要手动解析路径 --> <el-select v-model="selectedText" filterable remote reserve-keyword placeholder="请输入关键词"> <el-tree ref="treeRef" :data="treeData" show-checkbox node-key="id" highlight-current default-expand-all check-on-click-node /> </el-select> </div> </template> <script> export default { data() { return { selectedValue: [], // 存储级联选择的结果 selectedText: '', // 单独存储当前选中文本用于显示 treeData: [] // 初始化为空待加载实际业务数据 }; }, methods: { handleChange(value) { console.log('Selected:', value); }, loadTreeData() { this.treeData = [ { id: '1', label: 'Parent 1', children: [{ id: '1-1', label: 'Child A' }, { id: '1-2', label: 'Child B' }] }, { id: '2', label: 'Parent 2' } ]; } }, mounted() { this.loadTreeData(); // 页面初始化完成后填充数据 } }; </script> ``` 上述例子展示了两种可能的技术路线:一种基于原生 `el-cascader` 控件快速搭建;另一种则尝试融合 `el-select` 加上内部封装好的 `el-tree` 插件形式达成目标效果[^2]。 对于更复杂的场景比如异步加载子项或是跨层联动操作等高级特性,则建议深入研究官方文档以及社区贡献的相关解决方案[^3]。 ---
评论 29
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值