vue 表格懒加载

vue 表格懒加载

elementui表格数据量大的时候页面会出现卡顿,可以分次获取后台数据,不然页面直接卡死。表格懒加载需要后台返回一个总的页数,前端监听滚动到底部的时候去调接口来获取数据,每调一次接口将总数+1,。也可以直接用其他的ui组件来处理。

 <el-table
      :key="tableKey"
      :data="tableData"
      border
      fit
      highlight-current-row
      style="width: 100%"
      :height="tableHeight"
      ref="editTable"
    >
      <el-table-column
        align="center"
        prop="index"
        label="序号"
        type="index"
      ></el-table-column>
      <el-table-column
        align="center"
        prop="name"
        label="name"
      ></el-table-column>
      <el-table-column
        prop="email"
        label="email"
        align="center"
      ></el-table-column>
      <el-table-column
        prop="address"
        label="address"
        align="center"
      ></el-table-column>
    </el-table>
data() {
    return {   
      tableData: [],
      currentPage: 1,//当前加载的page
      pageSize: 20,//当前的limit
      totalPage: 8,//后台返回的总页数
    };
  },
 mounted() {  
    this.loadData();
    this.handleScroll()
  },
 methods: {
  //监听dom的scroll事件
    handleScroll() {
      let that = this;
      let dom = that.$refs.editTable.bodyWrapper;
      dom.addEventListener('scroll', function () {
        const scrollDistance = 
        dom.scrollHeight - dom.scrollTop - dom.clientHeight;
        if (scrollDistance <= 0) {         
          //等于0证明已经到底,可以请求接口
          if (that.currentPage < that.totalPage) {
            //当前页数小于总页数就请求
            that.currentPage++; //当前页数自增
            //请求接口的代码
            that.loadData();
          }
        }
      });
    },
    loadData() {
      //请求后台接口获取数据
      this.tableData = 后台接口返回的数据;
      this.tableData.map((v,i)=> {
        v.index = i+1;
      })      
    },
   

也可以在div上添加滚动事件

 <div class="artical" v-loading="isloading" ref="scrollbox">
     <el-scrollbar>
         <div
            v-for="(item, index) in tableData"
            :key="index"
            class="artical-main"
          >
              <div class="title">{{ item.jourHeadline }}</div>
              <div class="cerateTime">
                    创建人:{{
                      item.createUserName
                    }}&nbsp;&nbsp;&nbsp;发布时间:{{ item.jourTime }}
                  </div>
                  <div class="mainArt">{{ item.jourCentent }}</div>
                </div>
                <el-empty
                  :image-size="200"
                  v-if="tableData.length == 0"
                ></el-empty>
              </el-scrollbar>
            </div>
监听事件
  mounted() {
    document.addEventListener("scroll", this.handleScroll, true);
  },
  beforeDestroy() {
    document.removeEventListener("scroll", this.listenerFunction);
  },

 //监听滚动事件
    handleScroll() {
      if (this.dialogFormVisible) {
        if (this.$refs.scrollbox.scrollTop == 0) {
          if (this.total > this.tableData.length) {
            this.listQuery.pageSize = this.listQuery.pageSize + 10;
            this.getData();
          }
        }
      }
    },

因为这个是写在弹框里面的,没加if (this.dialogFormVisible)会报错,加了之后就没有再报错了。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值