当前位置:首页 > VUE

vue实现分页累加

2026-02-20 00:34:44VUE

实现分页累加的基本思路

分页累加通常指在滚动加载或分页请求时,将新数据追加到现有数据列表中,而非替换原有数据。Vue中可通过结合数组操作与分页逻辑实现。

核心代码实现

数据定义

data() {
  return {
    list: [],       // 存储累计的数据
    page: 1,        // 当前页码
    pageSize: 10,   // 每页条数
    isLoading: false // 加载状态
  }
}

请求方法示例

methods: {
  async loadMore() {
    if (this.isLoading) return;

    this.isLoading = true;
    try {
      const res = await api.getList({
        page: this.page,
        pageSize: this.pageSize
      });

      // 累加数据而非替换
      this.list = [...this.list, ...res.data];
      this.page++;
    } finally {
      this.isLoading = false;
    }
  }
}

滚动加载触发

通过监听滚动事件实现自动加载:

mounted() {
  window.addEventListener('scroll', this.handleScroll);
},
beforeDestroy() {
  window.removeEventListener('scroll', this.handleScroll);
},
methods: {
  handleScroll() {
    const scrollBottom = document.documentElement.scrollHeight - 
                        window.innerHeight - 
                        window.scrollY;
    if (scrollBottom < 100) {
      this.loadMore();
    }
  }
}

使用第三方库优化

对于复杂场景,可考虑使用专门库:

  1. vue-infinite-loading:提供现成的无限滚动组件
  2. vue-virtual-scroller:优化大数据量渲染性能

示例安装

npm install vue-infinite-loading

组件使用

<template>
  <InfiniteLoading @infinite="loadMore"/>
</template>

<script>
import InfiniteLoading from 'vue-infinite-loading';

export default {
  components: { InfiniteLoading },
  methods: {
    loadMore($state) {
      // 同前文请求逻辑,完成后调用:
      $state.loaded(); // 加载成功
      // 或 $state.complete(); // 无更多数据
    }
  }
}
</script>

性能优化建议

  • 使用唯一key优化v-for渲染

    <div v-for="item in list" :key="item.id">{{item.content}}</div>
  • 大数据量考虑虚拟滚动

    import { RecycleScroller } from 'vue-virtual-scroller';
  • 添加防抖避免频繁请求

    import _ from 'lodash';
    export default {
    methods: {
      handleScroll: _.debounce(function() {
        // 滚动逻辑
      }, 200)
    }
    }

边界情况处理

  • 无更多数据时禁用加载

    if (res.data.length < this.pageSize) {
    this.isComplete = true;
    return;
    }
  • 加载失败重试机制

    catch (error) {
    this.retryCount++;
    if (this.retryCount < 3) {
      setTimeout(this.loadMore, 1000);
    }
    }

vue实现分页累加

标签: 分页vue
分享给朋友:

相关文章

vue项目实现

vue项目实现

Vue 项目实现指南 环境准备 确保已安装 Node.js(建议版本 14+)和 npm/yarn。通过以下命令检查版本: node -v npm -v 安装 Vue CLI(脚手架工具):…

vue实现访问量

vue实现访问量

Vue 实现访问量统计的方法 使用前端计数 在 Vue 中可以通过简单的计数器实现页面访问量的统计。这种方法适合小型项目或演示用途。 // 在 Vue 组件中 data() { return…

vue全选实现

vue全选实现

Vue 全选实现方法 在 Vue 中实现全选功能通常涉及数据绑定和事件处理。以下是几种常见的实现方式: 基础实现方式 <template> <div> <i…

vue评分实现

vue评分实现

Vue 评分组件实现方法 使用第三方库(如 Element UI) 安装 Element UI: npm install element-ui 引入并注册组件: import Vue from…

vue功能实现

vue功能实现

Vue 功能实现指南 Vue.js 是一个渐进式 JavaScript 框架,广泛用于构建用户界面。以下是 Vue 功能的常见实现方法。 数据绑定 Vue 的核心功能之一是数据绑定,通过 v-mod…

vue实现socket

vue实现socket

Vue 中实现 WebSocket 通信 在 Vue 项目中实现 WebSocket 通信可以通过原生 WebSocket API 或第三方库(如 socket.io-client)完成。以下是两种常…