el-tree 阻止点击节点的时候自动展开或者收缩

本文介绍了在使用 El-Tree 组件时如何设置 `expand-on-click-node` 属性来控制节点的展开和收缩行为。默认情况下,点击节点会导致其展开或收缩,但若将其设置为 false,则必须通过点击箭头图标来实现这一操作。请注意,设置该属性时需加上冒号,否则将无法生效。示例代码展示了正确和错误的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

expand-on-click-node是否在点击节点的时候展开或者收缩节点, 默认值为 true,如果为 false,则只有点箭头图标的时候才会展开或者收缩节点。

 

 

但设置的时候,要加上:  不然无效

 

<!--这样可以-->
<el-tree :expand-on-click-node="false"  ...>


<!--这样无效-->
<el-tree expand-on-click-node="false"  ...>

 

### 单节点展开功能的实现 为了实现在 `<el-tree>` 组件中展开一个节点自动收起其他节点的功能,可以通过监听 `node-expand` 和 `node-collapse` 事件来控制树节点的状态。具体来说,在每次展开某个节点之前,先遍历整个树并关闭已打开的节点。 以下是完整的解决方案: #### 方法描述 通过绑定 `@node-expand` 和 `@node-collapse` 事件到 `<el-tree>` 上,可以在节点展开或折叠时执行特定逻辑。利用 `treeRef.setCurrentKey(null)` 或者手动调用 `treeRef.store.setCurrentNode()` 来管理当前活动节点的状态[^1]。 #### 示例代码 以下是一个基于 Vue.js 的实现方式: ```vue <template> <div> <el-tree :data="treeData" node-key="id" ref="treeRef" @node-expand="handleNodeExpand" @node-collapse="handleNodeCollapse"> </el-tree> </div> </template> <script> export default { data() { return { treeData: [ { id: 1, label: 'Parent Node', children: [{ id: 2, label: 'Child Node' }] }, { id: 3, label: 'Another Parent', children: [{ id: 4, label: 'Another Child' }] } ], activeNodeId: null, }; }, methods: { handleNodeExpand(node) { const treeRef = this.$refs.treeRef; if (this.activeNodeId !== null && this.activeNodeId !== node.id) { // 收缩之前的活跃节点 const previousActiveNode = treeRef.getNode(this.activeNodeId); if (previousActiveNode) { treeRef.collapseNode(previousActiveNode); } } this.activeNodeId = node.id; // 更新当前激活节点ID }, handleNodeCollapse(node) { if (this.activeNodeId === node.id) { this.activeNodeId = null; // 当前节点被折叠,则清空激活状态 } } } }; </script> ``` 上述代码实现了如下功能: - 使用 `@node-expand` 监听节点展开操作,并记录当前正在展开节点 ID。 - 如果有先前已经展开节点(即 `activeNodeId` 不为空),则将其折叠后再允许新节点展开- 节点折叠时清除对应的激活标记。 此方案能够有效解决多节点同时保持展开的问题,从而达到单节点展开的效果[^2]。 #### 关键技术点说明 1. **动态更新激活节点**:通过维护 `activeNodeId` 变量跟踪当前处于展开状态下的唯一节点。 2. **获取指定节点实例**:借助 `treeRef.getNode(id)` 获取目标节点以便进一步处理如折叠等动作[^3]。 --- ###
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值