iview-ui 表格滚动懒加载分页功能

前言

iview 的分页只有点击按钮分页组件,前阵子有个需求后端数据不分页返回数据,虽然几千条而已,但表格列项比较多,所以多少会有点卡顿。

可爱的需求人员不喜欢点击按钮分页,给我加鸡腿,故改为滚动懒加载分页。

表格标签:

v-loadmore 自定义的vue指令;触发指令后的回调方法loadMoreTableData

<el-table v-loadmore="loadMoreTableData" :data="tableDataList"> </el-table>

业务逻辑代码

methods中写滚动鼠标后的触发指令的回调方法相应的逻辑

loadMoreTableData() {
    let { pageIndex, pageCount, pageSize, getTableData } = this
    pageIndex++
    if (pageIndex > Math.ceil(pageCount/pageSize)) {
        return false
    }
    getTableData(pageIndex);
},

/**
 * @pageIndex 当前页
 * @pageCount 总数
 * @pageSize 每页显示页数
 * @tableData 通过接口获取到表格数据
 * @tableDataList 计算后要展示的表格数据
 */
getTableData(pageIndex) {
    let { pageCount, pageSize, tableData, tableDataList } = this
    pageCount = tableData.length
    if (pageCount <= pageSize) {
      tableDataList = tableData
    }else {
      let pageIndexs = Math.ceil(pageCount/pageSize)
      if( pageIndex > pageIndexs) { pageIndex = pageIndexs }
      let start = (pageIndex - 1) * pageSize
      let end = pageIndex * pageSize
      tableDataList = tableDataList.concat(tableData.slice(start, end))
    }
}

vue的自定义指令:

import Vue from 'vue'
Vue.directive('loadmore', {
    bind(el, binding) {
        // 获取iview-ui定义好的scroll盒子
        const selectWrap = el.querySelector('.ivu-table-body')
        selectWrap.addEventListener('scroll', function() {
         /*
          * scrollHeight 元素标签内容高度
          * scrollTop 获取元素滚动的偏移值,
          * clientHeight 元素标签的可见高度
          * 如果元素滚动到底, 下面等式返回true, 没有则返回false:
          * ele.scrollHeight - ele.scrollTop === ele.clientHeight;
          */
            let sign = 100
            const scrollDistance = this.scrollHeight - this.scrollTop - this.clientHeight
            if (scrollDistance <= sign) {
                binding.value()
            }
        })
    }
 })

转载自我的原创 掘金篇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值