el-tree懒加载删除某条数据 ,el-tree懒加载重置,el-tree刷新某个节点

 一、懒加载的tree已经全部展开,外部点击删除的时候不需要重新展开点击获取下一层数据

<template>
<el-tree
              ref="tree"
              :data="treeData"
              :props="defaultProps"
              render-after-expand
              highlight-current
              lazy
              :expand-on-click-node="false"
              @node-click="handleNodeClick"
              :default-expanded-keys="defaultexpanded"
              :node-key="defaultProps['id']"
              :default-checked-keys="defaultchecked"
              :load="loadNode">
              <span class="custom-tree-node" slot-scope="{ node }">
                <span v-if="node.level === 1" class="ewf-deptonelevel font16">{{
                  node.label
                }}</span>
                <span v-else class="ewf-depttwolevel">{{ node.label }}</span>
              </span>
            </el-tree>
</template>

<script>
export default {
  data() {
    return {
      treeName: "",
      treeHeight: "500px",
      treeData: [],
      defaultchecked: [],
      defaultexpanded: ["all"],
      defaultProps: {
        children: "children",
        label: "categoryName",
        id: "iidd",
        isLeaf: "leaf",
      },
    };
  },

  methods: {
    // 点击的时候记录当前 点击的data 和 node
    handleNodeClick(data,node) {
      this.currentData = data
      this.currentNode = node
    },
    
    // tree外部点击删除,并且不用初始化tree
    deleteFn(){
      // 删除接口调用成功的时候,再调用这个方法
      this.$refs.tree.remove(this.data); // 通过节点id找到对应树节点对象
    },
 }   
}
</script>

二、重置懒加载的tree

    // 重置的时候调用这个方法
    resetAllTree() {
      this.node.childNodes = []
      // this.node, this.resolve 在 loadNode 获取
      this.loadNode(this.node, this.resolve)
    },

   

    // 页面加载完成时,elmement-ui 会默认自动调用一次
    loadNode(node, resolve) {
      if (node.level === 0) {
        // 第一次的时候记录 node, resolve ,重置的时候需要用到
        this.node = node
        this.resolve = resolve
        return resolve([
          {
            iidd: "all",
            categoryName: "全部分类",
          },
        ]);
      } else if (node.level === 1) {
        this.getTreeData().then((res) => {
          resolve(res);
        });
      } else {
        this.getTreeData(node).then((res) => {
          resolve(res);
        });
      }
    },

 getTreeData(node) {
      return new Promise((resolve, reject) => {
        let params = {
          sourceSystem:this.sourceSystem
        }
        if(node && node.data && node.data.iidd){
          params.iidd = node.data.iidd
        }
        // 调用接口
        retrieveLazyMenus(params).then((res) => {
          res.data.forEach(el => {
            // hasChildren 接口返回的字段,用来表示是否还有子级数据
            el.leaf = !el.hasChildren
          })
          resolve(res.data);
        });
      });
    },

三、如顶部图片所示,给某一项新增子级数据,不初始化tree

    // 新增的时候记录当前 点击的data 和 node
    handleNodeClick(data,node) {
      this.currentData = data
      this.currentNode = node
    },

    // 调用新增接口后,然后再初始化当前节点,而不是初始化整个tree
    add(){
      // 获取当前节点,key可以在@node-click和:load绑定函数的回调参数node用变量存储后有需要刷新的地方取node.key
      let node = this.$refs.tree.getNode(this.currentNode.key);
      //  设置未进行懒加载状态
      node.loaded = false;
      // 重新展开节点就会间接重新触发load达到刷新效果
      node.expand();
 
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值