1.完成效果

2.要求

后台大哥说,数据量太大,没办法一次性把全部的数据给我,先给我第一级的数据,子项则在点击的时候进行请求;

3.开写~~~~~~

初始数据(对象数组):

组件调用:

<template>
   <el-tree :data="chulilist"  :props="defaultProps"  :render-content="renderContent" node-key="levelid"
                   :accordion="true" :default-expanded-keys="mylist"></el-tree>
</template>
复制代码

数据配置:

  data() {
      return {
         chulilist:[],
          defaultProps: {
            children: 'list',
            label: 'categoryname'
          },
          mylist:[],
     }
    },
复制代码

数据处理:

methods: {
<!--这里需要在项目中引入jsx语法-->
         renderContent(h, { node, data, store }) {
            return (
              <span style="flex: 1; display: flex; align-items: center; justify-content: space-between; 
                       font-size: 14px; padding-right: 8px;">
                  <span style="width:30%" on-click={ () => this.dian(data,node,store)}>
                       <i class="el-icon-circle-plus"  v-show={node.level!="3"} ></i>{node.label}
                  </span>
                  <span style="width:30%" >减价率:{data.rate}</span>
                  <span style="width:30%" ><el-button style="font-size: 12px;" type="text" 
                     on-click={ () => this.editrate(data)} >修改减价率</el-button>
                  </span>
             </span>);
      },
复制代码

请求回来的子项数据,用.list添加属性的方法,放到组件渲染的数据中;

   vue.chuliNum(vue.chulilist,vue.parentcateid,data.data.list);
      //     递归遍历的方法处理数据
      chuliNum:function(a,aid,dataa) {
        for(let i=0;i<a.length;i++){
          if(a[i].levelid==aid){
            a[i].list=[];
            a[i].list=dataa;
          }else{
            if(a[i].list!=undefined){
              this.chuliNum(a[i].list,aid,dataa);
            }
          }
        }
      },

复制代码

期望结果:

仔细查看数据:发现通过.list方法设置的属性,没有get/set,因此组件无法得到渲染;

涉及到vue的深入式响应原因,以下是我的数据处理方法:

     for(let i=0;i<vue.chulilist.length;i++){
         vue.$set(vue.chulilist[i],'list',vue.chulilist[i].list);
             if(vue.chulilist[i].list){
                    for(let y=0;y<vue.chulilist[i].list.length;y++){
                        vue.$set((vue.chulilist[i].list)[y],'list',(vue.chulilist[i].list)[y].list)
                     }
             }
    }
复制代码

不做深层解释,了解更多----OPen网站 cn.vuejs.org/v2/guide/re…

Logo

前往低代码交流专区

更多推荐