el-tree 点击树的文字不要收缩仅点击图标的时候收缩

本文介绍了如何在 Element UI 的 el-tree 组件中禁用点击节点的默认展开行为,以便仅通过箭头图标控制节点状态。详细说明了 `expand-on-click-node` 属性的应用和其默认值的更改。

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

<el-tree
  :data="data"
  show-checkbox
  node-key="id"
  default-expand-all
  :expand-on-click-node="false"
  :render-content="renderContent">
</el-tree>
在 Vue3 中使用 `el-tree` 组件时,可以通过插槽来自定义展开和收缩图标Element Plus 提供了 `default-expand-all` 和 `icon` 插槽,可以用来控制的展开状态以及自定义图标。 ### 自定义展开和收缩图标的方法 1. **使用 `icon` 插槽**:`el-tree` 提供了 `icon` 插槽,可以用来自定义展开和收缩时的图标。 2. **通过 `expanded` 属性控制节点展开状态**:可以使用 `default-expand-all` 属性来默认展开所有节点,或者通过 `expanded-keys` 属性手动控制展开的节点。 ### 示例代码 以下是一个自定义展开和收缩图标的示例代码: ```vue <template> <el-tree :data="treeData" :props="defaultProps" default-expand-all node-key="id" > <!-- 自定义图标 --> <template #icon> <span class="el-tree-node__expand-icon"> <i :class="isExpanded ? 'el-icon-arrow-down' : 'el-icon-arrow-right'"></i> </span> </template> </el-tree> </template> <script setup> import { ref } from 'vue'; // 的数据 const treeData = ref([ { id: 1, label: '一级 1', children: [ { id: 4, label: '二级 1-1', children: [ { id: 9, label: '三级 1-1-1', }, { id: 10, label: '三级 1-1-2', }, ], }, ], }, { id: 2, label: '一级 2', children: [ { id: 5, label: '二级 2-1', }, { id: 6, label: '二级 2-2', }, ], }, ]); // 默认的 props 配置 const defaultProps = { children: 'children', label: 'label', }; // 用于判断节点是否展开 const isExpanded = ref(true); </script> <style scoped> .el-tree-node__expand-icon { margin-right: 8px; } </style> ``` ### 说明: - **`icon` 插槽**:通过 `#icon` 插槽,可以自定义展开和收缩图标。这里使用了 Element Plus 提供的 `el-icon-arrow-down` 和 `el-icon-arrow-right` 图标- **`isExpanded` 状态**:`isExpanded` 是一个响应式变量,用于判断当前节点是否处于展开状态。可以通过监听节点的展开/折叠事件来动态更新 `isExpanded` 的值。 - **`default-expand-all` 属性**:设置 `default-expand-all` 为 `true` 可以默认展开所有节点。 ### 进一步扩展 如果需要根据节点的状态动态改变图标,可以通过监听 `node-expand` 和 `node-collapse` 事件来更新 `isExpanded` 的值。例如: ```vue <template> <el-tree :data="treeData" :props="defaultProps" node-key="id" @node-expand="handleExpand" @node-collapse="handleCollapse" > <template #icon="{ node }"> <span class="el-tree-node__expand-icon"> <i :class="node.expanded ? 'el-icon-arrow-down' : 'el-icon-arrow-right'"></i> </span> </template> </el-tree> </template> <script setup> import { ref } from 'vue'; // 的数据 const treeData = ref([ { id: 1, label: '一级 1', children: [ { id: 4, label: '二级 1-1', children: [ { id: 9, label: '三级 1-1-1', }, { id: 10, label: '三级 1-1-2', }, ], }, ], }, { id: 2, label: '一级 2', children: [ { id: 5, label: '二级 2-1', }, { id: 6, label: '二级 2-2', }, ], }, ]); // 默认的 props 配置 const defaultProps = { children: 'children', label: 'label', }; // 处理展开事件 const handleExpand = (node) => { node.expanded = true; }; // 处理折叠事件 const handleCollapse = (node) => { node.expanded = false; }; </script> <style scoped> .el-tree-node__expand-icon { margin-right: 8px; } </style> ``` ### 总结 通过 `el-tree` 的 `icon` 插槽,可以轻松自定义展开和收缩图标。结合 `node-expand` 和 `node-collapse` 事件,可以实现更复杂的动态图标切换逻辑。这种方法不适用于 Vue3,也适用于 Element Plus 的其他版本。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值