tnblog
首页
视频
资源
登录

element plus 树形 tree 懒加载的树形,如何动态添加节点

226人阅读 2025/5/15 17:03 总访问:892133 评论:0 收藏:0 手机
分类: 前端

思想思路:数据源里边是默认没有children的或者说没有走children这种结构,所以和正常的操作方法还有点不一样,所以应该使用append的方式添加而不使用children的方式添加

代码如下:

  1. <template>
  2. <div class="container">
  3. <el-tree
  4. ref="treeRef"
  5. :data="treeData"
  6. :load="loadNode"
  7. lazy
  8. @node-click="handleNodeClick"
  9. :props="defaultProps"
  10. highlight-current
  11. ></el-tree>
  12. <el-row class="mt-4">
  13. <el-input v-model="newNodeName" placeholder="请输入节点名称" class="w-64"></el-input>
  14. <el-button @click="addNode" type="primary" :disabled="!currentNode">添加子节点</el-button>
  15. </el-row>
  16. <div v-if="currentNode" class="mt-4 text-gray-500">
  17. 当前选中节点: {{ currentNode.label }} (ID: {{ currentNode.id }})
  18. </div>
  19. </div>
  20. </template>
  21. <script setup>
  22. import { ref, onMounted } from 'vue'
  23. import { ElTree, ElInput, ElButton, ElRow } from 'element-plus'
  24. const treeRef = ref(null)
  25. const treeData = ref([{
  26. id: 1,
  27. label: '一级节点',
  28. children: [],
  29. leaf: false
  30. }])
  31. const currentNode = ref(null)
  32. const newNodeName = ref('')
  33. const defaultProps = {
  34. children: 'children',
  35. label: 'label'
  36. }
  37. const loadNode = (node, resolve) => {
  38. // 根节点已有初始数据
  39. if (node.level === 0) {
  40. return resolve(treeData.value)
  41. }
  42. // 模拟异步加载子节点
  43. setTimeout(() => {
  44. const childNodes = Array.from({ length: 2 }, (_, i) => ({
  45. id: `${node.data.id}-${i + 1}`,
  46. label: `${node.data.label}-子节点${i + 1}`,
  47. children: [],
  48. leaf: false
  49. }))
  50. resolve(childNodes)
  51. }, 500)
  52. }
  53. const handleNodeClick = (data) => {
  54. currentNode.value = data
  55. }
  56. const addNode = () => {
  57. if (!currentNode.value || !newNodeName.value.trim()) return
  58. const newNode = {
  59. id: `new-${Date.now()}`,
  60. label: newNodeName.value.trim(),
  61. children: [],
  62. leaf: false // 设置为非叶子节点,允许后续懒加载
  63. }
  64. // 使用 append 方法添加节点
  65. /*
  66. 使用 append 方法添加节点,才能添加到下面去,不然使用currentNode.value.children.push(newNode);这种方法添加默认是添加到最上面的。
  67. 数据源里边是默认没有children的,所以和正常的操作方法还有点不一样,所以使用append的方式添加而不使用children的方式添加
  68. */
  69. treeRef.value.append(newNode, currentNode.value)
  70. // 清空输入框
  71. newNodeName.value = ''
  72. // 如果父节点之前被标记为叶子节点,需要更新状态
  73. if (currentNode.value.leaf) {
  74. currentNode.value.leaf = false
  75. }
  76. console.log('节点添加成功:', newNode)
  77. }
  78. </script>
  79. <style scoped>
  80. .container {
  81. max-width: 600px;
  82. margin: 20px auto;
  83. }
  84. </style>

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

vue3 element plus 表单输入框放到一行

当垂直方向空间受限且表单较简单时,可以在一行内放置表单。 通过设置 inline 属性为 true 可以让表单域变为行内的表单域...

element plus 下拉列表select的使用。下拉列表无法选择值

下拉列表无法选择值要给一个v-model: 而且要给对,在下面对应的要有:

element plus 下拉列表默认选中有延迟

会先加载id或者编号,然后有点延迟的时间才转换成内容。 [TOC]可以这样解决,绑定的时候给中文名字,然后在改变的时候给Id...

vue elementuivue3 element plus 文件上传的时候设置其他参数。后台.net接收传递的额外参数。图片上传

比如上传文件的时候额外传递两个select选择的值 前台前面上传文件的时候要提供默认参数很简单,el-upload绑定一个data即可...

vue3 element plus 表格使用vue3常用界面搭配。vue3基础模板使用

一个简单的表格加时间搜索界面效果如下: 代码如下: &lt;template&gt; &lt;div class=&quot;app-container&quot;&g...

element plus table 表格 获取选中的行

官网的表格文档就有,直接一个方法就搞定了,看官网表格的文档中的方法介绍就有了 使用getSelectionRows方法即可 &lt;el-...

element plus 日期选择器 限制日期范围。限制只能选择当前月份之后的月份

element plus 日期选择器 可以用disabledDate来限制日期范围。例如限制只能选择当前月份以及之后的月份。 &lt;el-date-pi...

element plus 带提交内容的删除确认框。element plus 确认框

[TOC]Element Plus 带提交内容的删除确认框 ElMessageBox.prompt(&#39;是否确认删除数据,涉及到的数据将会被物理删除,...

vue3 element plus table+Sortable.js 行拖动表格拖动

要先安装好Sortable.js依赖 cnpm install sortable.js 实现拖动的代码如下可以直接复制运行 &lt;template&gt; &lt;...

element plus与element ui 多选表格判断某行是否选中

element plus 多选表格判断每行是否选中@select=&quot;selectRow&quot; const selectRow = (selection: any, row: any) ...

element plus 表格 table分页状态或者条件类型切换下实现勾选记录

实现这种切换的时候勾选的复选框状态保持,如果是分页其实实现思路也一样。 实现思路:有一个缓存,存储的是选中的行,...

element plus tree 获取选中节点的父节点。树获取所有选中的节点

[TOC]element plus tree 获取选中节点的父节点通过 treeRef.value.getNode(data) 获取到当前节点的实例,随后通过 node.par...
这一生多幸运赶上过你.
排名
8
文章
243
粉丝
7
评论
7
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术