el-tree筛选目标节点及所有子节点

使用el-tree时,经常碰到需要筛选出目标节点同时展示所有子节点的场景。

比如有一个年级、班级的树状结构,用户搜索了2023级,需要展示2023级下面所有班级。


 

以下是最简单的实现代码,只写了筛选方法

filterMethod(value, data, node) {
    if(!value) return true;

    // 首先筛选目标节点,打上filterFlag来区分是否要显示该节点
    data.filterFlag = data.label.includes(value);
    
    // 然后给子节点赋上父节点的filterFlag
    // 加上!data.filterFlag判断是为了防止上一行执行完了再进来重复执行
    if(!data.filterFlag && node.level > 1) {
        data.filterFlag = node.parent.data.filterFlag;
    }
    return data.filterFlag
}

效果对比

 左侧是框架自带筛选效果,右侧本文实现效果

                   

### el-tree 设置默认展开节点或控制节点展开状态 在 `el-tree` 中,可以通过多种方式实现默认展开节点或者动态控制节点的展开状态。 #### 1. **通过 `default-expanded-keys` 属性设置默认展开节点** 可以利用 `default-expanded-keys` 来指定哪些节点应该被默认展开。此属性需要绑定一个数组,其中包含要默认展开的节点对应的 `node-key` 的值。 例如: ```vue <el-tree :data="treeData" node-key="id" :default-expanded-keys="expandedKeys"> </el-tree> ``` 在此处,`expandedKeys` 是一个数组,包含了希望默认展开的节点 ID[^2]。 如果遇到点击节点无法关闭的情况,可能是因为某些子节点仍然存在于 `default-expanded-keys` 数组中。解决方法是在关闭节点时移除对应节点及其子节点的相关 UUID 或者其他唯一标识符[^1]。 --- #### 2. **通过 `default-expand-all` 实现全局默认展开** 如果需要让整个树结构中的所有节点都被默认展开,则可以直接使用 `default-expand-all` 属性。需要注意的是,该属性仅在首次渲染时生效。因此,当数据更新后想要再次应用这一效果,需重新渲染组件。 解决方案如下所示: ```vue <el-tree ref="treeRef" v-if="refreshTree" :data="treeData" node-key="id" :default-expand-all="isExpandAll"> </el-tree> ``` 为了使更改后的配置能够立即反映到视图上,可以在父组件逻辑部分加入以下代码片段来刷新树实例的状态: ```javascript this.isExpandAll = newValue; this.refreshTree = false; this.$nextTick(() => { this.refreshTree = true; }); ``` 这里展示了如何借助 Vue 生命周期钩子函数 `$nextTick()` 完成异步操作以确保 DOM 更新完成后再执行下一步骤[^3]。 --- #### 3. **手动控制单个/多个节点的展开与折叠** 除了静态定义外,还可以调用 API 方法主动管理特定节点的行为: - 使用 `treeRef.store.setCurrentKey(null)` 清空当前高亮项之前保存的信息; - 调用 `setCurrentNode(nodeId)` 设定新的激活项目; - 结合以上两点清除掉不必要的残留影响从而恢复正常交互功能[^4]; 另外也可以直接针对目标对象分别调用 `.setExpanded([key], expandedState)` 函数来自由切换它们各自的可见性状况。比如这样写法就可以达到目的了: ```javascript const treeInstance = this.$refs['helpTree']; if(treeInstance){ const nodeIdToToggle='someUniqueId'; let newStateForThisNode=false;//true表示打开,false代表收起 treeInstance.setExpanded([nodeIdToToggle],newStateForThisNode); } ``` --- #### 4. **前端过滤、懒加载及排序支持下的复杂场景适配** 对于更复杂的业务需求如带搜索框实时筛选显示结果或是按需延迟加载远端资源等情况,官方文档也提供了相应的指导说明可供参考学习。具体做法包括但不限于监听输入变化事件进而修改内部匹配规则列表以及调整实际呈现出来的层次关系等等[^5]。 --- ### 总结 综上所述,无论是简单的初始状态下自动展示部分内容还是后续运行期间灵活响应用户的各类动作指令,“Element Plus”的 Tree 组件都能很好地满足开发者们在这方面的期望!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值