当前位置:首页 > 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();
    }
  }
}

使用第三方库优化

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

vue实现分页累加

  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渲染

    vue实现分页累加

    <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实现alert

vue实现alert

实现自定义 Alert 组件 在 Vue 中可以通过组件化方式实现自定义 Alert 弹窗。以下是基于 Vue 3 的实现示例: 组件代码 (Alert.vue) <template>…

vue nexttick 实现

vue nexttick 实现

Vue nextTick 实现原理 Vue 的 nextTick 是一个用于在下次 DOM 更新循环结束之后执行延迟回调的方法。它主要用于确保在 DOM 更新完成后执行某些操作。 核心实现机制 ne…

vue实现选人

vue实现选人

实现选人功能的基本思路 在Vue中实现选人功能通常涉及以下核心环节:数据绑定、用户交互处理、状态管理以及界面渲染。以下是具体实现方法: 数据准备与组件结构 创建包含人员信息的数组,通常从API获取或…

vue 实现赋值

vue 实现赋值

Vue 实现赋值的方法 在 Vue 中,赋值操作通常涉及数据绑定和响应式更新。以下是几种常见的赋值方式: 直接赋值给 data 属性 在 Vue 实例的 data 对象中定义的属性可以直接通过 th…

vue实现门户

vue实现门户

Vue 实现门户网站的关键步骤 搭建基础框架 使用 Vue CLI 或 Vite 初始化项目,安装 Vue Router 管理多页面路由。门户通常需要响应式布局,可引入 UI 库如 Element P…

node vue实现

node vue实现

Node.js 与 Vue.js 实现方案 环境搭建 安装 Node.js(建议 LTS 版本),通过 npm 或 yarn 初始化项目。Vue.js 可通过 Vue CLI 快速搭建: npm…