递归处理iview-tree数据

763 阅读1分钟

1.优化递归

描述问题
接口返回数据后,需要给每条数据添加extend=true,并渲染到iview-tree上,此时需要递归处理数据
解决方法(1)

res--->接口返回的数据:
 res.map(it => {
      it.expand = true;
      it && it.children ? this.getIsLeaf(it) : "";
    });
    this.treeData = res;
            
    //递归循环设置
    getIsLeaf(obj) {
      let arr = obj.children || [];
      for (let i in arr) {
        let item = arr[i];
        if (item && item.children) {
          item.expand = true;
          this.getIsLeaf(item);
        }
      }
    }

方法(2)

 function transTree(data) {
    data.forEach(item => {
      item.expand = true;
      if (item.children && item.children.length) {
        transTree(item.children);
      }
    });
  }
  const res = await this.MANAGE_BASE_APPS(); //接口返回的数据
  if (!Array.isArray(res)) {
    let msg = res || "获取域权限失败!";
    this.$Message.error(msg);
    return;
  }

  transTree(res); //递归调用
  this.treeData = res

2.优化处理接口数据

描述问题
接口返回数据后,由于已经是new Promise,则无需再返回new Promise
old方法

domainBaseApps() {
    return new Promise((resolve, reject) => {
        this.MANAGE_BASE_APPS()
          .then(res => {
           //接受接口返回的数据
            this.treeData = res;
            resolve(true);
          })
          .catch(err => {
            let msg = err || "获取域权限失败!";
            this.$Message.error(msg);
          });
    });
}

优化方法

async domainBaseApps() {
      function transTree(data) {
        data.forEach(item => {
          item.expand = true;
          if (item.children && item.children.length) {
            transTree(item.children);
          }
        });
      }

      const res = await this.MANAGE_BASE_APPS();
      if (!Array.isArray(res)) {
        let msg = res || "获取域权限失败!";
        this.$Message.error(msg);
        return;
      }

      transTree(res);
      this.treeData = res;
    }
    async domainBaseApps() {
      const res = await this.MANAGE_BASE_APPS();
      if (!Array.isArray(res)) {
        let msg = res || "获取域权限失败!";
        this.$Message.error(msg);
        return;
      }
      this.treeData = res;
    }

4.总结:

做项目时,还是要多思考如何写代码,方法有多种,但要学会找到合适的方法,每天进步一点点,提高编码能力,加油吧,小菜鸟~~,end~~~