ant design vue tree控件自定义图标并动态变化

效果

在这里插入图片描述
展开文件夹时
在这里插入图片描述

代码


        <a-tree
          :treeData="treeData"
          :default-selected-keys="defaultValue"
          show-icon
          :style="{
            'min-height': '500px',
            height: '700px',
            'border-right': '2px solid #c1c1c1',
            'overflow-y': 'auto',
          }"
          @select="onSelect"
          @expand="onExpand"
        >
          <img src="./img/folder.svg" slot="folder" style="margin-right: 5px;" width="20px" />
          <img src="./img/openFolder.svg" slot="openFolder" style="margin-right: 5px;" width="20px" />
        </a-tree>

/* 前端给treedata赋slots值
 * 使用递归处理
 * 传入的参数:treedata
 */
setIcon(datas) {
      var that = this
      for (var i = 0; i < datas.length; i++) {
        datas[i].slots = { icon: 'folder' }
        if (datas[i].children.length > 0) {
          that.setIcon(datas[i].children)
        }
      }
    },
 /* 点击展开有子节点的节点时 改变图标
  * 通过改变其slots的值来改变图标
  */
onExpand(expandedKeys, event) {
      if (event.expanded) {
        event.node.dataRef.slots.icon = 'openFolder'
      } else {
        event.node.dataRef.slots.icon = 'folder'
      }
 },

如果需要改变目录节点的图标

<a-tree
          :treeData="treeData"
          :default-selected-keys="defaultValue"
          show-icon
          :style="{
            'min-height': '500px',
            height: '700px',
            'border-right': '2px solid #c1c1c1',
            'overflow-y': 'auto',
          }"
          @select="onSelect"
          @expand="onExpand"
        >
        //start  目录节点的图标  务必 slot值为 switcherIcon
          <a-icon slot="switcherIcon" type="down" />
        // end
          <img src="./img/folder.svg" slot="folder" style="margin-right: 5px;" width="20px" />
          <img src="./img/openFolder.svg" slot="openFolder" style="margin-right: 5px;" width="20px" />
        </a-tree>


如果有用,请给小弟一个赞的支持!谢谢

### 关于Ant Design Vue中树控件拖拽功能的使用方法 在Ant Design Vue中的`<a-tree>`组件可以通过设置特定属性来启用定制化其拖拽行为。为了实现这一特性,主要依赖两个方面:一是通过`draggable`属性开启拖拽能力;二是利用`@drop`事件处理函数响应用户的拖放操作。 对于基本配置而言,在模板内定义如下结构即可激活拖拽选项[^1]: ```html <a-tree v-model="checkedKeys4" checkStrictly :showLine="true" checkable @check="onCheckChange" :tree-data="treeData" draggable @drop="onDrop"> </a-tree> ``` 上述代码片段展示了如何向`<a-tree>`传递必要的参数以支持拖拽交互。其中,`v-model`绑定选中状态,而`:tree-data`则用于指定初始数据源。值得注意的是,当涉及到更复杂的业务逻辑时——比如仅允许同级别之间的拖拽而不影响其他层次关系,则需进一步调整默认行为[^2]。 此外,针对某些特殊场景下的应用需求,如希望点击确认按钮才触发实际变动或是确保初次加载页面时首个节点处于高亮状态等,开发者可以结合Vue生命周期钩子其他API完成相应设定[^3]。 最后,考虑到不同版本间可能存在差异以及具体项目环境的独特性,在集成此功能前建议查阅官方文档获取最新指导说明,参照实例进行适当调试优化[^4]。 #### 实现要点总结 - **启用拖拽**:借助`draggable`布尔型属性; - **监听动作**:依靠`@drop`回调捕获放置时刻的信息; - **维护内部状态**:运用`v-model`同步外部变量组件间的勾选情况; - **自定义样式&交互**:依据实际情况扩展额外CSS类名或JavaScript脚本增强用户体验。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qlanto

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值