当前位置:首页 > VUE

vue中实现分页

2026-03-30 13:05:13VUE

实现分页的基本思路

在Vue中实现分页通常需要结合后端API返回的分页数据和前端的分页组件。核心逻辑包括处理页码切换、数据请求和列表渲染。

后端API要求

后端API应支持分页参数,通常包含page(当前页)和pageSize(每页条数)字段。响应数据需包含分页信息,例如:

{
  "data": [...],
  "total": 100,
  "page": 1,
  "pageSize": 10
}

前端分页组件实现

安装常用分页组件库(如element-uiel-pagination):

npm install element-ui

模板中使用分页组件:

<template>
  <div>
    <ul>
      <li v-for="item in list" :key="item.id">{{ item.name }}</li>
    </ul>
    <el-pagination
      @current-change="handlePageChange"
      :current-page="pagination.page"
      :page-size="pagination.pageSize"
      :total="pagination.total"
      layout="prev, pager, next">
    </el-pagination>
  </div>
</template>

数据请求与状态管理

在Vue组件中定义分页数据和请求方法:

export default {
  data() {
    return {
      list: [],
      pagination: {
        page: 1,
        pageSize: 10,
        total: 0
      }
    }
  },
  methods: {
    fetchData() {
      const { page, pageSize } = this.pagination
      axios.get('/api/list', { params: { page, pageSize } })
        .then(res => {
          this.list = res.data.data
          this.pagination.total = res.data.total
        })
    },
    handlePageChange(page) {
      this.pagination.page = page
      this.fetchData()
    }
  },
  created() {
    this.fetchData()
  }
}

自定义分页组件

如需自定义分页组件,可参考以下结构:

<template>
  <div class="pagination">
    <button 
      @click="changePage(currentPage - 1)" 
      :disabled="currentPage === 1">
      上一页
    </button>
    <span v-for="page in pages" :key="page">
      <button 
        @click="changePage(page)" 
        :class="{ active: page === currentPage }">
        {{ page }}
      </button>
    </span>
    <button 
      @click="changePage(currentPage + 1)" 
      :disabled="currentPage === totalPages">
      下一页
    </button>
  </div>
</template>

<script>
export default {
  props: {
    currentPage: Number,
    pageSize: Number,
    total: Number
  },
  computed: {
    totalPages() {
      return Math.ceil(this.total / this.pageSize)
    },
    pages() {
      const range = []
      for (let i = 1; i <= this.totalPages; i++) {
        range.push(i)
      }
      return range
    }
  },
  methods: {
    changePage(page) {
      if (page >= 1 && page <= this.totalPages) {
        this.$emit('page-change', page)
      }
    }
  }
}
</script>

分页性能优化

对于大数据量分页,可采用虚拟滚动技术。安装vue-virtual-scroller

npm install vue-virtual-scroller

使用示例:

<template>
  <RecycleScroller
    class="scroller"
    :items="list"
    :item-size="50"
    key-field="id">
    <template v-slot="{ item }">
      <div>{{ item.name }}</div>
    </template>
  </RecycleScroller>
</template>

<script>
import { RecycleScroller } from 'vue-virtual-scroller'
export default {
  components: { RecycleScroller }
}
</script>

分页与路由结合

将分页状态同步到URL路由:

vue中实现分页

watch: {
  '$route.query.page'(val) {
    this.pagination.page = Number(val) || 1
    this.fetchData()
  }
},
methods: {
  handlePageChange(page) {
    this.$router.push({
      query: { ...this.$route.query, page }
    })
  }
}

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

相关文章

vue实现xterm

vue实现xterm

在 Vue 中集成 Xterm.js Xterm.js 是一个基于 TypeScript 的前端终端组件库,可用于在浏览器中实现终端功能。以下是在 Vue 项目中集成 Xterm.js 的详细步骤。…

vue 实现赋值

vue 实现赋值

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

vue nexttrick实现

vue nexttrick实现

Vue 中 nextTick 的实现原理 nextTick 是 Vue 提供的一个异步方法,用于在下次 DOM 更新循环结束之后执行延迟回调。它利用了 JavaScript 的事件循环机制,确保回调在…

vue实现word文档实现预览

vue实现word文档实现预览

在Vue中实现Word文档预览可以通过多种方式实现,以下是几种常见的方法: 使用mammoth.js库 mammoth.js是一个将Word文档(.docx)转换为HTML的JavaScript库,…

vue前端实现教程

vue前端实现教程

Vue 前端实现基础教程 环境准备 安装 Node.js(建议 LTS 版本)和 npm/yarn。 通过命令行全局安装 Vue CLI: npm install -g @vue/cli 创建项…

vue实现选择全选

vue实现选择全选

实现全选功能的基本思路 在Vue中实现全选功能通常需要以下核心逻辑:维护一个数组存储选中项的状态,通过计算属性判断是否全选,并通过方法切换全选状态。 数据准备 创建包含可选项目的数据和存储选中状态的…