关闭ant的tree_Ant-design-vue 树形控件tree 新增节点,删除节点,编辑节点的解决方案...

本文介绍了在Ant-design-vue中处理树形控件tree的操作,包括如何新增顶级菜单,删除和编辑节点。由于Ant-design-vue官方未提供直接操作节点的方法,文章提供了自定义解决方案,包括递归查找节点进行删除和编辑的实现方式。
摘要由CSDN通过智能技术生成

Ant-design-vue 树形控件tree 新增节点,删除节点,编辑节点的解决方案

最近项目需求如下,想做一个菜单管理,用tree的形式,用过element-ui的都知道怎么处理,但是由于ant-design-vue并未提供操作节点方法,遂自己的解决方案如下(案例文件链接下载:案例文件链接下载)

5642b7dd4f35

在这里插入图片描述

添加顶级菜单

:treeData="treeData"

>

{{ item.title }}

type="primary"

class="but_type"

style="right:200px;"

@click="()=> append(item)"

>新增

type="primary"

class="but_type"

style="right:120px;"

@click="()=> edit(item)"

>编辑

remove(item)">删除

const treeData = [

{

title: '0-0',

key: '0-0',

scopedSlots: { title: 'custom' },

children: [

{

title: '0-0-0',

key: '0-0-0',

scopedSlots: { title: 'custom' },

children: [

{ title: '0-0-0-0', key: '0-0-0-0', scopedSlots: { title: 'custom' } },

{ title: '0-0-0-1', key: '0-0-0-1', scopedSlots: { title: 'custom' } },

{ title: '0-0-0-2', key: '0-0-0-2', scopedSlots: { title: 'custom' } }

]

},

{

title: '0-0-1',

key: '0-0-1',

scopedSlots: { title: 'custom' },

children: [

{ title: '0-0-1-0', key: '0-0-1-0', scopedSlots: { title: 'custom' } },

{ title: '0-0-1-1', key: '0-0-1-1', scopedSlots: { title: 'custom' } },

{ title: '0-0-1-2', key: '0-0-1-2', scopedSlots: { title: 'custom' } }

]

},

{

title: '0-0-2',

key: '0-0-2',

scopedSlots: { title: 'custom' }

}

]

},

{

title: '0-1',

key: '0-1',

scopedSlots: { title: 'custom' },

children: [

{ title: '0-1-0-0', key: '0-1-0-0', scopedSlots: { title: 'custom' } },

{ title: '0-1-0-1', key: '0-1-0-1', scopedSlots: { title: 'custom' } },

{ title: '0-1-0-2', key: '0-1-0-2', scopedSlots: { title: 'custom' } }

]

},

{

title: '0-2',

key: '0-2',

scopedSlots: { title: 'custom' }

}

]

export default {

data () {

return {

treeData,

}

},

methods: {

// 递归查找

searchOption (option, arr, type = 'delect') {

console.log(option, arr)

for (let s = 0; s < arr.length; s++) {

console.log(arr[s].key, option.key)

if (arr[s].key === option.key) {

if (type === 'delect') {

arr.splice(s, 1)

} else {

//这是模拟数据编辑数据

this.$set(arr, s, {

title: '12121212',

key: '12121212',

scopedSlots: { title: 'custom' }

})

}

break

} else if (arr[s].children && arr[s].children.length > 0) { // 递归条件

this.searchOption(option, arr[s].children)

} else {

continue

}

}

},

append (data) {

//模拟添加

const newChild = { title: 'ceshi1',

key: 'ceshi1',

scopedSlots: { title: 'custom' },

children: [] }

if (!data.children) {

this.$set(data, 'children', [])

}

data.children.push(newChild)

},

remove (data) {

//先请求后端接口,删除成功后执行

this.searchOption(data, this.treeData)

},

edit (data) {

//先请求后端接口,编辑成功后执行

this.searchOption(data, this.treeData, 'edit')

},

}

}

.ant-tree-title {

width: 100%;

}

.title {

float: left;

}

.ant-card-body {

:global {

.ant-tree {

line-height: 3;

li {

position: relative;

}

}

}

}

.ant-card-body .but_type {

float: right;

position: absolute;

right: 40px;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3中,Ant-Design-VueTree组件的用法与Vue2有些不同。以下是示例代码: ```html <template> <a-tree :tree-data="treeData" :draggable="true" :block-node="true" :show-line="true" :default-expanded-keys="defaultExpandedKeys" v-model:selected-keys="selectedKeys" @select="onSelect"> <template #title="{ key, title }"> <span> {{ title }} <a @click.stop="addNode(key)">Add</a> <a @click.stop="removeNode(key)">Delete</a> </span> </template> </a-tree> </template> <script> import { ref } from 'vue' export default { setup() { const treeData = ref([ { title: 'Parent 1', key: '0-0', children: [ { title: 'Child 1', key: '0-0-0' }, { title: 'Child 2', key: '0-0-1' } ] } ]) const defaultExpandedKeys = ref(['0-0']) const selectedKeys = ref([]) const addNode = (parentKey) => { const newNode = { title: 'New Node', key: `${parentKey}-${treeData.value.length}` } const parentNode = treeData.value.find(node => node.key === parentKey) if (!parentNode.children) { parentNode.children = [] } parentNode.children.push(newNode) treeData.value = [...treeData.value] } const removeNode = (key) => { const parentKey = key.split('-').slice(0, -1).join('-') const parentNode = treeData.value.find(node => node.key === parentKey) parentNode.children = parentNode.children.filter(node => node.key !== key) treeData.value = [...treeData.value] } const onSelect = (selectedKeys) => { console.log(selectedKeys) } return { treeData, defaultExpandedKeys, selectedKeys, addNode, removeNode, onSelect } } } </script> ``` 这个示例与Vue2中的示例类似,只是我们使用了Vue3的Composition API来编写代码。我们使用了ref函数来创建响应式变量。在addNode和removeNode方法中,我们使用了Vue3的响应式API来更新数据。当我们改变treeData的值,我们必须通过解构赋值来创建一个新的数组来触发更新。注意,在Vue3中,我们使用v-model来绑定selected-keys。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值