Element树形结构懒加载增删改查

树形结构,需求是这样的。服务器一次返回同级的节点,要求增删改查不刷新树形结构。删改查都还好,关键是这个增有个小坑。后台给你返回leaf字段判断这个节点有没有子节点,但是elementui中当设置了树形节点isLeaf为true的时候他的append方法添加子节点是无效的。下面是一个leaf为true的节点属性。
Element树形结构懒加载增删改查
问题的关键就是在这两个属性上面。当用户添加的时候将isLeaf和isLeafByUser设置为false。一开只注意到isLeaf,怎么添加都不生效被坑坏了,删除了再添加…被玩坏了
写出来后发现很简单

<template>
   <div>
       <el-tree
       ref="tree"
      :props="props1"
      lazy
      :load="loadNode1"
      :highlight-current='true'
      @node-click="handleNodeClick"
    >
  </el-tree>
    <el-button @click="addNode">添加子节点</el-button>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
   data() {
      return {
          props1: {
          label: 'label',
          children: 'children',
          isLeaf:'leaf'
        },
        data1:[{
           label: '一级 1',
          children: [],
        }],
        treeNode:{},
        pointNode:{},
        treeKey:'',
            };
      },
    methods: {
      addNode(){
        if(this.treeNode.isLeaf){
           this.treeNode.isLeaf = false;
          this.treeNode.isLeafByUser= false;
        }        
         this.$refs.tree.append({'label':'添加的子节点','children':[],'leaf':true},this.treeNode); 
         this.treeNode.expanded = true;

      },
      handleNodeClick(node,tree,msg){
           this.treeNode = tree;
      },
      loadNode1(node, resolve) {
        if (node.level === 0) {
          return resolve(this.data1);
        }
        if (node.level > 1) return resolve([]);

        setTimeout(() => {
          const data = [{
           label: 'leaf',
           children:[],
           leaf: true
          }, {
            label: 'zone'
          }];

          resolve(data);
        }, 500);
      }
    }
}
</script>


拿的官方的demo。改的话就是修改上面的label属性,删除的话官方API中有remove方法。就不贴代码了。由于代码例子的原因展开再关闭会触发 if (node.level > 1) return resolve([]),显示不出来;而实际上这个地方应该是一个ajax请求。
Element树形结构懒加载增删改查