elementUI树形组件的load属性

在elementUI的官方文档中介绍了load方法,但是并没有介绍load方法使用的实例,今天我们就来捋一捋loda方法:

load属性需要传入一个该树形节点加载时所调用的函数,此函数函数接收两个参数,一个是node,即当前节点,一个是resolve作为数据处理函数,不懂这个函数的同学可以看看Promise

这里我要实现一个这样的树形结构图,话不多说,上图:

 

 

下面是elementUI代码:

  <el-tree :props="defaultProps" @node-click="handleNodeClick" lazy accordion :load="treeLoad" highlight-current></el-tree>

  值得注意的是,树形组件懒加载需要添加lazy属性,load才会生效,详细介绍请参考官方文档,prpps属性为树形组件的默认配置,我的代码如下:

      defaultProps: {//树形组件的配置
            children: 'children',
            label: 'name',
            isLeaf: 'is_leaf'
       },
    这里需要注意的是这里的lable、isLeaf属性值为后台传过来代表lable和isLeaf的字段名,我这边后台传过来的lable和IsLeaf分别是name和is_leaf,isLeaf只能识别bool值,如果后台传的是0,1则需要进行转换。
   接下来我们康康handleNodeClick函数,这个函数可以通过接受一个参数来打印当前节点的信息:
      ...
  methods: {
    handleNodeClick(data) { //
               console.log(data);
           },
 }

 

 当然在这里这个函数并没有什么用...

接下来看treeLoad函数:

methods: {

  treeLoad(node, resolve) {
               if(node.level == 0) {
                 this.getData(resolve);
               }
               if(node.level >= 1) {
                this.sonTreeLoad(node,resolve)
               }
           }

}

  因为这个函数已经对参数node进行了处理,所以才导致hangdleNodeClick可以不需要。

  再来看看上面这个函数调用的getData函数,

getData(resolve) { //获取类目列表
               axios.post(url,{
                   token:token,
                   parent_id: 0,
                   country: 'us'
               }).then(res=>{     
                               var data = res.data.data;
                               for(var i=0 ; i<data.length; i++){
                                   data[i].name += '\n' + data[i].ch_name;//这里需求需要中文和英文分行,插入分行符,需要搭配white-space: pre-wrap属性
                                   data[i].is_leaf == 1 ? data[i].is_leaf = true :  data[i].is_leaf = false; //因为后台传过来的是0|1,所以这里转化为true和false
                                   resolve(res.data.data);   
                   }
               }).catch(err=>{
                   console.log(err)
               })
           }
  最后来看看sonTreeLoad函数:
  sonTreeLoad(node,resolve){
               axios.post(url,{
                   token: getToken('Admin-Token'),
                   country: 'us',
                   parent_id: node.data.id
               }).then(res=>{
         var data = res.data.data;
                               for(var i=0 ; i<data.length; i++){
                                   data[i].name += '\n' + data[i].ch_name;
                                   data[i].is_leaf == 1 ? data[i].is_leaf = true :  data[i].is_leaf = false; 
                                   resolve(res.data.data);   
                     }
               }).catch(err=>{
                   console.log(err)
               })
           }
可以看到除了传入的参数有一个不同之外,其他地方基本大同小异。。。。

 

posted @ 2020-08-02 00:48  墨知白  阅读(8887)  评论(0编辑  收藏  举报