当前位置:首页 > VUE

vue实现分页加载

2026-03-10 03:58:48VUE

Vue 实现分页加载的方法

使用 Element UI 的分页组件

Element UI 提供了现成的分页组件 el-pagination,可以快速实现分页功能。

安装 Element UI:

npm install element-ui

在 Vue 文件中引入并使用:

<template>
  <div>
    <el-table :data="tableData">
      <!-- 表格列定义 -->
    </el-table>
    <el-pagination
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page="currentPage"
      :page-sizes="[10, 20, 30, 40]"
      :page-size="pageSize"
      layout="total, sizes, prev, pager, next, jumper"
      :total="total">
    </el-pagination>
  </div>
</template>

<script>
export default {
  data() {
    return {
      tableData: [],
      currentPage: 1,
      pageSize: 10,
      total: 0
    }
  },
  methods: {
    handleSizeChange(val) {
      this.pageSize = val;
      this.fetchData();
    },
    handleCurrentChange(val) {
      this.currentPage = val;
      this.fetchData();
    },
    fetchData() {
      // 模拟 API 调用
      const start = (this.currentPage - 1) * this.pageSize;
      const end = start + this.pageSize;
      this.tableData = this.allData.slice(start, end);
      this.total = this.allData.length;
    }
  },
  mounted() {
    this.fetchData();
  }
}
</script>

自定义分页逻辑

如果不使用 UI 库,可以通过自定义逻辑实现分页。

vue实现分页加载

定义分页数据和方法:

<template>
  <div>
    <ul>
      <li v-for="item in paginatedData" :key="item.id">{{ item.name }}</li>
    </ul>
    <button @click="prevPage" :disabled="currentPage === 1">Previous</button>
    <span>Page {{ currentPage }} of {{ totalPages }}</span>
    <button @click="nextPage" :disabled="currentPage === totalPages">Next</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      allData: [], // 所有数据
      paginatedData: [], // 当前页数据
      currentPage: 1,
      pageSize: 10,
      totalPages: 0
    }
  },
  methods: {
    updatePaginatedData() {
      const start = (this.currentPage - 1) * this.pageSize;
      const end = start + this.pageSize;
      this.paginatedData = this.allData.slice(start, end);
      this.totalPages = Math.ceil(this.allData.length / this.pageSize);
    },
    prevPage() {
      if (this.currentPage > 1) {
        this.currentPage--;
        this.updatePaginatedData();
      }
    },
    nextPage() {
      if (this.currentPage < this.totalPages) {
        this.currentPage++;
        this.updatePaginatedData();
      }
    }
  },
  mounted() {
    // 模拟数据加载
    this.allData = Array.from({ length: 100 }, (_, i) => ({ id: i, name: `Item ${i}` }));
    this.updatePaginatedData();
  }
}
</script>

结合后端 API 分页

实际项目中通常需要从后端 API 获取分页数据。

定义 API 调用方法:

vue实现分页加载

<script>
export default {
  data() {
    return {
      tableData: [],
      currentPage: 1,
      pageSize: 10,
      total: 0
    }
  },
  methods: {
    async fetchData() {
      try {
        const response = await axios.get('/api/data', {
          params: {
            page: this.currentPage,
            size: this.pageSize
          }
        });
        this.tableData = response.data.items;
        this.total = response.data.total;
      } catch (error) {
        console.error('Error fetching data:', error);
      }
    },
    handlePageChange(page) {
      this.currentPage = page;
      this.fetchData();
    }
  },
  mounted() {
    this.fetchData();
  }
}
</script>

使用无限滚动分页

对于移动端或需要滚动加载的场景,可以使用无限滚动。

安装 vue-infinite-scroll:

npm install vue-infinite-scroll

实现无限滚动:

<template>
  <div v-infinite-scroll="loadMore" infinite-scroll-disabled="busy" infinite-scroll-distance="10">
    <div v-for="item in items" :key="item.id">{{ item.name }}</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [],
      page: 1,
      busy: false
    }
  },
  methods: {
    async loadMore() {
      this.busy = true;
      const newItems = await this.fetchData(this.page);
      this.items = [...this.items, ...newItems];
      this.page++;
      this.busy = false;
    },
    async fetchData(page) {
      const response = await axios.get(`/api/data?page=${page}`);
      return response.data;
    }
  },
  mounted() {
    this.loadMore();
  }
}
</script>

注意事项

  • 分页逻辑需要与后端 API 的页码和每页大小参数保持一致。
  • 对于大数据量,建议使用后端分页以减少前端性能压力。
  • 无限滚动适合移动端或社交类应用,但需要注意内存管理。

标签: 分页加载
分享给朋友:

相关文章

vue  实现分页

vue 实现分页

实现分页的基本思路 在Vue中实现分页通常需要结合后端API返回的数据和前端的分页组件。分页的核心逻辑包括计算总页数、处理当前页码变化以及触发数据请求。 分页组件示例 使用Element UI的分页…

vue实现下拉分页思想

vue实现下拉分页思想

实现下拉分页的基本思想 下拉分页(Infinite Scroll)是一种常见的分页加载方式,当用户滚动到页面底部时自动加载下一页数据。Vue 中可以通过监听滚动事件或使用第三方库实现。 监听滚动事件…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

php分页功能的实现

php分页功能的实现

分页功能的基本原理 分页功能的核心是通过SQL的LIMIT子句实现数据分段查询。LIMIT接受两个参数:起始位置偏移量和每页记录数。例如查询第2页(每页10条)的SQL语句为: SELECT * F…

vue实现分页组件

vue实现分页组件

Vue 分页组件实现 基础分页组件结构 创建一个名为 Pagination.vue 的文件,包含以下基础模板和逻辑: <template> <div class="pagina…

vue实现网页分页

vue实现网页分页

Vue 实现网页分页的方法 使用计算属性实现分页 在 Vue 中可以通过计算属性对数据进行分页处理。定义一个 currentPage 和 pageSize,利用计算属性返回当前页的数据。 data(…