el-tree懒加载部分

本文只展示懒加载部分

:props="treeProps"
:load="loadNode" 
 lazy  
<el-tree
          ref="tree"
          style="height:100%"
          class="filter-tree"
          node-key="id"
          :data="data"
          :props="treeProps"
          show-checkbox
          :filter-node-method="filterNode"
          @check="handleCheckChange"
          :load="loadNode"          
          lazy  
        />
treeProps: {
        children: 'children',
        label: 'itemCateName',
        isLeaf: 'leaf'
      }

**

数据一次性全部获取案例:

**

loadNode(node, resolve) {
      if (node.level === 0) {    //对第一层级的处理
        node.data.forEach(item => {
          if (item.children === undefined) {
              item.leaf= true       //叶子节点判断,就是前面那个箭头..
            }else{
              item.leaf= false
            }
        })
        return resolve(node.data)   //暴露为第一层级
      }
      if(node.level > 0) {       //对后续层级的处理
        function digui(bianli) { //递归    //以递归的形式判断设置叶子节点判断
          bianli.forEach(item=>{
            if(item.children) {
              item.leaf= false
              digui(item.children)
            }else {
              item.leaf= true
            }
          })
        }
        digui(node.data.children)
      }
      setTimeout(() => {        
        console.log('diuwaduicusacduhscdsadnsadk',node);
        resolve(node.data.children)        //暴露后续的层级
      },500)
    },

**

分层获取数据案例:

**
本例是通过3个接口展示了3棵树,仅第一棵树有子级,后两颗没有
在这里插入图片描述

loadNode(node, resolve) {
      if(node.data.children){          //对3个数的第一层级分别处理
        if (node.level === 0) {      //品类     //第一层级处理
          if (node.data.hasChildren === '1') {         //有无子级(1有0无)
                node.data.children.forEach(item => {
                  item.leaf= false
                })
          }else if(node.data.hasChildren === '0') {
            node.data.children.forEach(item => {
              item.leaf= true
            })
          }
          return resolve(node.data.children)   //暴露
        }
      } else {
        if (node.level === 0) {                //品牌和供应商有效
          node.data.forEach(item => {
            if (item.children === undefined) {
                item.leaf= true
              }else{
                item.leaf= false
              }
          })
          return resolve(node.data)
        }
      }
      if(node.level > 0) {             //对子层级做处理(没用到)
        console.log('diuwaduicsadk',node);
        console.log('diuwaduicsadk',node.data);
      }

      //子级请求
      var zijiparams = this.zjparams
      var id = node.data.id
      var level = node.level       
      Axios.get('/api/newMove/getAllCateListByLevel',{      子级数据请求
        params: {
          ...zijiparams,
          code:id,
          level:level
        }
      }).then(res => {
        console.log(res);
        res.data.children.forEach(item=>{
          if(res.data.level === '3') {
            item.leaf= true
          } else {
            item.leaf= false
          }
        })
        resolve(res.data.children)      //别忘了暴露
      })
    },

做一个小扩展吧,大家有没有遇到过数据量过大,导致渲染过慢的情况?我这里就遇到了,然后我做了一个小处理

} else {
        if (node.level === 0) {                //品牌和供应商
          node.data.forEach(item => {
            if (item.children === undefined) {
                item.leaf= true
              }else{
                item.leaf= false
              }
          })
           resolve(node.data.slice(0,50)) //先加载50条数据,速度就够快了吧
           
          setTimeout(() => {
          resolve(node.data.slice(50))  //然后在这里300毫秒后加载后面的数据
          },300)
        }
      }

其实在这里还是会有问题!
似乎树的加载确实变快了,可是没办法操作,它在卡着呢!为什么卡呢,因为在加载后面的数据啊 ! ^(0.0*);
所以我感觉还挺low的,那么大家有没有什么好的方式呢,评论分享下,我学学呗 (;= . =;)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值