当前位置:首页 > VUE

vue实现数据分页

2026-02-18 22:41:30VUE

Vue 实现数据分页的方法

使用计算属性分页

通过计算属性对数据进行切片处理,结合当前页码和每页条数动态计算显示范围:

data() {
  return {
    currentPage: 1,
    itemsPerPage: 10,
    allItems: [...] // 完整数据源
  }
},
computed: {
  paginatedItems() {
    const start = (this.currentPage - 1) * this.itemsPerPage
    const end = start + this.itemsPerPage
    return this.allItems.slice(start, end)
  },
  totalPages() {
    return Math.ceil(this.allItems.length / this.itemsPerPage)
  }
}

使用第三方库

安装分页专用库如vuejs-paginate

npm install vuejs-paginate

组件中使用:

import Paginate from 'vuejs-paginate'

export default {
  components: { Paginate },
  methods: {
    changePage(pageNum) {
      this.currentPage = pageNum
    }
  }
}

模板部分:

<paginate
  :page-count="totalPages"
  :click-handler="changePage"
  :container-class="'pagination'"
></paginate>

服务端分页

当数据量较大时,建议采用API分页查询:

methods: {
  async fetchPage(page) {
    const res = await axios.get(`/api/items?page=${page}&limit=10`)
    this.paginatedItems = res.data.items
    this.totalCount = res.data.total
  }
}

完整组件示例

<template>
  <div>
    <table>
      <tr v-for="item in paginatedItems" :key="item.id">
        <td>{{ item.name }}</td>
      </tr>
    </table>

    <div class="pagination">
      <button 
        v-for="page in totalPages" 
        :key="page"
        @click="currentPage = page"
        :class="{ active: currentPage === page }"
      >
        {{ page }}
      </button>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentPage: 1,
      itemsPerPage: 5,
      allItems: [
        // 示例数据
        {id: 1, name: 'Item 1'},
        {id: 2, name: 'Item 2'},
        // ...更多数据
      ]
    }
  },
  computed: {
    paginatedItems() {
      const start = (this.currentPage - 1) * this.itemsPerPage
      const end = start + this.itemsPerPage
      return this.allItems.slice(start, end)
    },
    totalPages() {
      return Math.ceil(this.allItems.length / this.itemsPerPage)
    }
  }
}
</script>

<style>
.pagination button {
  margin: 0 5px;
}
.pagination button.active {
  font-weight: bold;
  color: blue;
}
</style>

动态每页条数

添加选择器允许用户调整每页显示数量:

<select v-model="itemsPerPage">
  <option value="5">5 per page</option>
  <option value="10">10 per page</option>
  <option value="20">20 per page</option>
</select>

性能优化建议

对于超大数据集(超过10万条),推荐:

vue实现数据分页

  • 使用虚拟滚动代替分页(如vue-virtual-scroller)
  • 实现服务端分页+前端缓存
  • 添加加载状态和错误处理
data() {
  return {
    isLoading: false,
    error: null
  }
},
methods: {
  async loadPage(page) {
    try {
      this.isLoading = true
      const data = await fetchPageData(page)
      // 更新数据
    } catch (err) {
      this.error = err.message
    } finally {
      this.isLoading = false
    }
  }
}

标签: 分页数据
分享给朋友:

相关文章

vue实现表格数据修改

vue实现表格数据修改

实现表格数据修改的基本思路 在Vue中实现表格数据修改通常涉及以下核心步骤:数据绑定、编辑状态切换、表单输入处理和数据提交。以下是一个典型实现方案: 数据绑定与渲染 使用v-for指令循环渲染表格数…

vue数据代理底层实现

vue数据代理底层实现

Vue 数据代理的底层实现原理 Vue 的数据代理是通过 Object.defineProperty 或 Proxy(Vue 3)实现的,将数据对象的属性代理到 Vue 实例上,使得可以直接通过 th…

Vue数据依赖实现

Vue数据依赖实现

Vue数据依赖实现原理 Vue的数据依赖实现基于响应式系统,核心是通过Object.defineProperty或Proxy拦截数据变化,结合发布-订阅模式实现依赖收集和更新触发。 核心机制 依赖收…

vue实现数据筛选

vue实现数据筛选

数据筛选的实现方式 在Vue中实现数据筛选可以通过计算属性、方法或第三方库完成。以下是几种常见的方法: 计算属性筛选 使用计算属性对数组数据进行筛选,具有缓存特性,适合静态或较少变化的数据。 co…

vue完整实现分页

vue完整实现分页

Vue 分页组件实现 分页组件模板 分页组件通常包含页码按钮、上一页/下一页按钮和跳转功能。以下是一个基础模板结构: <template> <div class="pagina…

vue实现数据太多

vue实现数据太多

处理 Vue 中大数据量的优化方案 虚拟滚动(Virtual Scrolling) 使用 vue-virtual-scroller 或 vxe-table 等库实现虚拟滚动,仅渲染可视区域内的 DOM…