vue+elementUI实现滚动加载请求接口

25 篇文章 2 订阅

需求如图所示:
在这里插入图片描述
由于图片较大,一次全把数据请求回来难免会太慢,就需要滚动加载请求数据。

实现:element组件:InfiniteScroll 无限滚动
主要代码如下:

<template>
  <div class="route-wrapper">
    <ul
      v-infinite-scroll="infiniteScroll"
      // 在要实现滚动加载的列表上上添加v-infinite-scroll,并赋值相应的加载方法,可实现滚动到底部时自动执行加载方法。
      :infinite-scroll-disabled="routeLoad || noMore" // 是否禁用(数据到最后时,禁止滚动加载)
      :infinite-scroll-distance="5" // 触发加载的距离阈值,单位为px
      class="all-route">
      <li
        v-for="(item, index) in routeData"
        :key="index"
        class="route-item">
        ...
      </li>
    </ul>
  </div>
</template>
<script>
import { getAirlineList } from '@/api/route';

export default {
  name: 'AllRoute',
  data() {
    return {
      routeData: [],
      noMore: false, // 控制滚动禁用
      routeLoad: false, // 控制滚动禁用
      pageNo: 0, // 页码
      pageSize: 6 // 一页6条
    };
  },
  methods: {
    // 滚动加载方法
    infiniteScroll() {
      this.routeLoad = true;
      this.pageNo += 1; // 页码每次滚动+1
      this.getRouteList();
    },
    // 获取数据
    getRouteList() {
      let para = {
        pageNo: this.pageNo,
        pageSize: this.pageSize
      };
      getAirlineList(para)
        .then(res => {
        // 把每一次滚动加载请求的数据push的routeData数组
          let list = res.data.records;
          for (let i = 0; i < list.length; i++) {
            this.routeData.push(list[i]);
          }
          // 如果请求回来的数据小于pageSize,则说明数据到底了。
          if (list.length < 6) {
            this.noMore = true;
          }
          // 避免数据总条数是pageSize的倍数时,数据到底还会请求一次。
          if (this.routeData.length === res.data.total) {
            this.noMore = true;
          }
          this.routeLoad = false;
        })
        .catch(res => {});
    }
  }
};
</script>
<style lang="scss" scoped>
.route-wrapper {
  .all-route {
    height: 300px;
    overflow-y: auto;
  }
}
</style>

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值