element table滚动加载+vue自定义指令

1、首先自定义 一个全局滚动加载指令 命名为: loadmore

.el-table__body-wrapper是加载容器,获取向下滚动距离,和左滑距离,只有向下滚动到底部时,触发加载事件,且当滚动条达到底部时,左右滑动时不再重复触发加载事件。

Vue.directive('loadmore',{
			bind: function (el,binding) {
				const selectWrap = el.querySelector('.el-table__body-wrapper');
				let currentLeft = 0;//初始左滑距离为0
				selectWrap.addEventListener('scroll', function() {
					const scrollDistance = this.scrollHeight - this.scrollTop - this.clientHeight;//向下滚动距离
					const scrollL = this.scrollLeft - currentLeft;//左滑距离
					currentLeft = this.scrollLeft;
					// 当纵向滑动到底部,且横向不滑动时,触发滚动事件
					if (scrollDistance <= 0 && scrollL == 0) {
						binding.value();
					}
				});

			},
		});

2、在 el-table 中调用loadmore指令: v-loadmore=“loadMore”

通过loadmore指令,加载loadMore事件
在这里插入图片描述

<el-table   v-loadmore="loadMore" :data="table.data" border size="small">
table: {
                data: [],// 表格数据
                query: {
                    pageSize: 20,
                    currentPage: 1,
                },
                total: 0,//表格数据记录量
            },

loadMore方法 很多页面要用到滚动加载,提取公共方法 loads().

 //滚动加载
            loadMore(){
                loads(this.table,'url接口',this.$message);
            },

3、加载数据loads()

pageSize: 20,默认加载第一页数据20条,当滚动到底部时,加载页数+1,

function loads(table,url,msg) {
    if(!table || url == '') return "";
    if(table.query.currentPage == 1 && (table.data.length < table.total){
        table.query.currentPage++
    }
    table.loading = true;
    axios.post(ctx + url, urlEncode(table.query).slice(1)).then(res => {
        table.loading = false;
        var size = table.data.length + res.data.length;   //当前表格记录量加上新获取到的数据量
        if(size <= res.total){   //如果小于数据总量,则加载1页到表格中,否则给出提示信息
            table.query.currentPage++;
            table.data = table.data.concat(res.data);
        }else{
            msg.warning("到底了,没有更多数据了!");
        }
        return table.data;
    }).catch(error => {
        table.loading = false;
    });
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值