ElementUi tree结构 懒加载使用

前言

        这是官网原话:   由于在点击节点时才进行该层数据的获取,默认情况下 Tree 无法预知某个节点是否为叶子节点,所以会为每个节点添加一个下拉按钮,如果节点没有下层数据,则点击后下拉按钮会消失。同时,你也可以提前告知 Tree 某个节点是否为叶子节点,从而避免在叶子节点前渲染下拉按钮。

        其中在数据添加leaf: true,就证明该节点下没有子级。

一. html结构

<template>
    <div>
        <el-tree :props="props" :load="loadNode" lazy>
        </el-tree>
    </div>
</template>





data() {
    return {
       props: {
           label: 'name',
           children: 'zones',
           isLeaf: 'leaf'
       },
    }
},

二. 方法

因为tree懒加载会默认自动请求一次方法 下面是模拟请求数据来操作,  node中我们可以获取当前点击tree结构的数据值,进行传值 。在实际开发中 请求接口时 肯定会有一个字段比如镇街id 如果当前请求接口没有传镇街id 后端返回的就是第一级数据 传了镇街id 就是返回当前镇街下的数据。

loadNode(node, resolve) {
    let _this = this;
    console.log('------node-----', node);   // 获取点击tree结构数据
    if (node.level === 0) {
       _this.handlegettreeData(resolve);
    }
    if (node.level === 1) {
       _this.handlegettreeData(resolve, node.data.id);
    }
    if (node.level > 1) return resolve([]);
},
// 获取tree结构数据
        handlegettreeData(resolve,zjid) {
            console.log('----error-----', zjid);

            // tree结构第一级数据
            if (!zjid) {
                let arr = [
                    {
                        name: '马池口镇',
                        id: '1'
                    },
                    {
                        name: '南口镇',
                        id: '2'
                    },
                    {
                        name: '白泉镇',
                        id: '3'
                    },
                    {
                        name: '白浮镇',
                        id: '4'
                    },
                    {
                        name: '大涨镇',
                        id: '5'
                    }
                ];
                
                resolve(arr);
                
            } else {
                setTimeout(() => {
                    let arr = [
                        {
                            name: '村1',
                            id: '6'
                        },
                        {
                            name: '村2',
                            id: '7'
                        },
                        {
                            name: '村3',
                            id: '8'
                        },
                        {
                            name: '村4',
                            id: '9'
                        },
                        {
                            name: '村5',
                            id: '10'
                        }
                    ];

                    resolve(arr);
                }, 1000);
            }

        },

我这里做的是模拟只有两层tree数据来做的,当你项目中不确定有几层数据时就要修改loadNode方法啦。 

三. 不确定层数

loadNode(node, resolve) {
    let _this = this;
    console.log('------node-----', node);   // 获取点击tree结构数据
    if (node.level === 0) {
       _this.handlegettreeData(resolve);
    }
    if (node.level > 1) {
       _this.handlegettreeData(resolve, node.data.id);
    }
},
// 获取tree结构数据
        handlegettreeData(resolve,zjid) {
            console.log('----error-----', zjid);

            // tree结构第一级数据
            if (!zjid) {
                let arr = [
                    {
                        name: '马池口镇',
                        id: '1'
                    },
                    {
                        name: '南口镇',
                        id: '2'
                    },
                    {
                        name: '白泉镇',
                        id: '3'
                    },
                    {
                        name: '白浮镇',
                        id: '4'
                    },
                    {
                        name: '大涨镇',
                        id: '5'
                    }
                ];
                
                resolve(arr);
                
            } else {
                let arr = [];  // 代表请求后端返回的数据
                if(arr.length > 0) {
                    resolve(arr)
                }else {
                    resolve([]);
                }
            }

        },

上面loadNode 方法在获取一级数据之后,根据当前点击tree数据里的值来进行请求 有我们就传值,后端就会根据值来对应返回数据。这时我们就要根据是否有值来操作resolve();这个构造函数。 

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值