element tree树形控件自定义图标以及隐藏自带箭头

本文讲述了如何替换Element UI树形控件中的默认箭头,使用自定义加减号,并隐藏原图标以满足领导审美。通过CSS定位和opacity属性,成功实现了树形结构的美观定制。

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

今天做一个需求,树形控件展示数据,但领导觉得element自带的树形控件箭头不好看,

 想要换成加减号的,没办法,谁让我就宠着他呢,在网上看了一堆文件,基本上自定义图标都很明确的介绍了如何操作。但是还是没有隐藏自带的图标,我看了一下内容,自己找了找方法,最终效果就是这样实现了,现在给大家说一下具体的操作情况

<el-tree :data="data" node-key="id" :expand-on-click-node="false">
          <span class="custom-tree-node" slot-scope="{ node, data }" style="display: flex;">
            <i v-if="!data.children" class=""></i><-- 没有子级所展示的图标 -->
            <i v-else-if="node.expanded" class="el-icon-minus"></i><-- 展开后的图标 -->
            <i v-else class="el-icon-plus"></i><-- 未展开的图标 -->
            <div style="display: flex;justify-content: space-between;width: 50vw;">
              <span>{{ node.label }}</span>
              <div>
                <span>王者峡谷部 李白</span>
                <span class="blues" style="font-size: 1em;margin-left: 40px;">剩 30 天</span>
              </div>
            </div>
          </span>
        </el-tree>

这个是组件中的内容。下图是初步完成后的效果

 组件中的加号减号已经加上了,现在就是把箭头去掉,我试了一些方法,要么隐藏后直接消失,新添加的图标无法触发展开功能,要么就是隐藏后位置不对。所以我用到了opacity这个属性,下面是配置的css

// 自定义图标中隐藏自带箭头
  ::v-deep .el-tree-node__content>.el-tree-node__expand-icon {
    position: absolute;
    opacity: 0;
  }

  ::v-deep .el-tree-node__content {
    position: relative;
  }

设置好后是这样的效果

 

### 解决Element UI树形控件回显时自动展开的问题 对于Element UI的树形控件,在编辑模式下实现节点回显自动展开特定路径的功能是一个常见的需求。为了确保在回显数据时能够正确展示对应的树结构,且使指定的节点处于已选中状态,可以采取以下方法: #### 设置默认展开的关键属性 通过设置`default-expanded-keys`属性来控制哪些节点应该被初始状态下展开。此属性接受一个数组作为参数,该数组包含了希望默认展开的所有节点键值。 ```html <el-tree :data="treeData" node-key="id" :default-expanded-keys="expandedKeys"> </el-tree> ``` 当需要更新要显示的状态或者响应某些事件(如点击按钮触发刷新),可以通过修改`expandedKeys`变量的内容动态调整哪些分支应当打开或关闭[^1]。 #### 实现逻辑处理函数 为了让树状图能记住上次的选择情况在下次访问时恢复这些选择,可以在初始化阶段或是接收到新的输入源之后执行相应的操作。具体来说就是遍历当前存储于 Vuex store 或者本地 state 中保存的历史记录列表,找到匹配项将它们加入到 `expandedKeys` 数组里去。 ```javascript // 假设 selectedNodes 是之前保存好的已选项 ID 列表 const expandedKeys = []; selectedNodes.forEach(nodeId => { const pathIds = findPath(treeData, nodeId); if (pathIds.length > 0) { // 如果找到了对应路径,则将其沿途经过的所有父级 id 加入到 expandedKeys 中 expandedKeys.push(...new Set(pathIds)); } }); this.expandedKeys = [...new Set(expandedKeys)]; // 使用 set 来去除重复元素后再赋值给组件实例上的 data 属性 ``` 上述代码片段展示了如何基于历史记录构建出应予展开的节点集合。这里假设存在名为 `findPath()` 的辅助函数用于查找某个子节点在整个层次结构内的完整路径;实际项目可根据具体情况自行编写此类工具函数[^3]。 #### 自动勾选功能配合使用 如果除了让某些节点保持可见之外还想同时标记其已被选取过的话,那么还可以利用另一个叫做 `checked-keys` 的 prop 。它的工作方式类似于前者,只不过作用对象变成了复选框而非折叠箭头而已。 ```html <el-tree ... :checked-keys="checkedKeys"> </el-tree> ``` 综上所述,通过对以上几个方面的合理配置即可很好地解决 Element UI 树形控件中存在的回显及自动展开问题[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值