vue3 基于el-tree增加、删除节点(非TypeScript 写法)

打印 上一主题 下一主题

主题 626|帖子 626|积分 1888

话不多说,直接贴代码
  1. <template>
  2.   <div class="custom-tree-container">
  3.     <!-- <p>Using render-content</p>
  4.     <el-tree style="max-width: 600px" :data="dataSource" show-checkbox node-key="id" default-expand-all
  5.       :expand-on-click-node="false" :render-content="renderContent" /> -->
  6.     <p>Using scoped slot</p>
  7.     <el-tree style="max-width: 600px" :data="dataSource" show-checkbox node-key="id" default-expand-all
  8.       :expand-on-click-node="false">
  9.       <template #default="{ node, data }">
  10.         <span class="custom-tree-node">
  11.           <span>{{ node.label }}</span>
  12.           <span>
  13.             <a @click="append(data)"> Append </a>
  14.             <a style="margin-left: 8px" @click="remove(node, data)"> Delete </a>
  15.           </span>
  16.         </span>
  17.       </template>
  18.     </el-tree>
  19.   </div>
  20. </template>
  21. <script>
  22. import { reactive, ref, toRefs } from 'vue'
  23. // import {Node} from 'element-plus/es/components/tree/src/model/node'
  24. export default {
  25.   name: 'part',
  26.   setup() {
  27.     const state = reactive({
  28.       dataSource: [
  29.         {
  30.           id: 1,
  31.           label: 'Level one 1',
  32.           children: [
  33.             {
  34.               id: 4,
  35.               label: 'Level two 1-1',
  36.               children: [
  37.                 {
  38.                   id: 9,
  39.                   label: 'Level three 1-1-1'
  40.                 }
  41.               ]
  42.             }
  43.           ]
  44.         }
  45.       ]
  46.     })
  47.     const append = (data) => {
  48.       let treeNodeId = data.$treeNodeId;
  49.       console.info(data)
  50.       // alert('当前id'+data.id)
  51.       // alert(data.$treeNodeId)
  52.       let id =data.id*100+1
  53.       const newChild = { id: id, label: data.label+'-'+id, children: [] };
  54.       if (!data.children) {
  55.         data.children = [];
  56.       }
  57.       data.children.push(newChild);
  58.       // state.dataSource = [data];
  59.     }
  60.     const remove = (node, data) => {
  61.       const parent = node.parent;
  62.       const children = parent.data.children || parent.data;
  63.       const index = children.findIndex(d => d.id === data.id);
  64.       children.splice(index, 1);
  65.       // dataSource.value = [...dataSource.value];
  66.     };
  67.     return {
  68.       ...toRefs(state),
  69.       append,
  70.       remove
  71.     }
  72.   }
  73. }
  74. </script>
  75. <style>
  76. .custom-tree-node {
  77.   flex: 1;
  78.   display: flex;
  79.   align-items: center;
  80.   justify-content: space-between;
  81.   font-size: 14px;
  82.   padding-right: 8px;
  83. }
  84. </style>
复制代码
结果如下


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

来自云龙湖轮廓分明的月亮

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表