
思想思路:数据源里边是默认没有children的或者说没有走children这种结构,所以和正常的操作方法还有点不一样,所以应该使用append的方式添加而不使用children的方式添加
代码如下:
<template>
<div class="container">
<el-tree
ref="treeRef"
:data="treeData"
:load="loadNode"
lazy
@node-click="handleNodeClick"
:props="defaultProps"
highlight-current
></el-tree>
<el-row class="mt-4">
<el-input v-model="newNodeName" placeholder="请输入节点名称" class="w-64"></el-input>
<el-button @click="addNode" type="primary" :disabled="!currentNode">添加子节点</el-button>
</el-row>
<div v-if="currentNode" class="mt-4 text-gray-500">
当前选中节点: {{ currentNode.label }} (ID: {{ currentNode.id }})
</div>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue'
import { ElTree, ElInput, ElButton, ElRow } from 'element-plus'
const treeRef = ref(null)
const treeData = ref([{
id: 1,
label: '一级节点',
children: [],
leaf: false
}])
const currentNode = ref(null)
const newNodeName = ref('')
const defaultProps = {
children: 'children',
label: 'label'
}
const loadNode = (node, resolve) => {
// 根节点已有初始数据
if (node.level === 0) {
return resolve(treeData.value)
}
// 模拟异步加载子节点
setTimeout(() => {
const childNodes = Array.from({ length: 2 }, (_, i) => ({
id: `${node.data.id}-${i + 1}`,
label: `${node.data.label}-子节点${i + 1}`,
children: [],
leaf: false
}))
resolve(childNodes)
}, 500)
}
const handleNodeClick = (data) => {
currentNode.value = data
}
const addNode = () => {
if (!currentNode.value || !newNodeName.value.trim()) return
const newNode = {
id: `new-${Date.now()}`,
label: newNodeName.value.trim(),
children: [],
leaf: false // 设置为非叶子节点,允许后续懒加载
}
// 使用 append 方法添加节点
/*
使用 append 方法添加节点,才能添加到下面去,不然使用currentNode.value.children.push(newNode);这种方法添加默认是添加到最上面的。
数据源里边是默认没有children的,所以和正常的操作方法还有点不一样,所以使用append的方式添加而不使用children的方式添加
*/
treeRef.value.append(newNode, currentNode.value)
// 清空输入框
newNodeName.value = ''
// 如果父节点之前被标记为叶子节点,需要更新状态
if (currentNode.value.leaf) {
currentNode.value.leaf = false
}
console.log('节点添加成功:', newNode)
}
</script>
<style scoped>
.container {
max-width: 600px;
margin: 20px auto;
}
</style>
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)
评价
排名
8
文章
243
粉丝
7
评论
7
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术