当前位置:首页 > VUE

vue中如何实现分页

2026-01-22 03:07:05VUE

实现基础分页功能

在Vue中实现分页通常需要结合后端API返回的分页数据。前端主要处理页码切换、数据请求和UI渲染。使用v-for循环渲染分页按钮,通过计算属性动态生成页码数组:

<template>
  <div>
    <ul>
      <li v-for="item in currentPageData" :key="item.id">{{ item.name }}</li>
    </ul>
    <div class="pagination">
      <button @click="prevPage" :disabled="currentPage === 1">上一页</button>
      <button 
        v-for="page in pageNumbers" 
        :key="page"
        @click="goToPage(page)"
        :class="{ active: currentPage === page }"
      >
        {{ page }}
      </button>
      <button @click="nextPage" :disabled="currentPage === totalPages">下一页</button>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      allData: [],       // 所有数据
      currentPage: 1,    // 当前页码
      pageSize: 10,     // 每页条数
      totalItems: 0     // 总数据量
    }
  },
  computed: {
    totalPages() {
      return Math.ceil(this.totalItems / this.pageSize)
    },
    currentPageData() {
      const start = (this.currentPage - 1) * this.pageSize
      const end = start + this.pageSize
      return this.allData.slice(start, end)
    },
    pageNumbers() {
      const range = []
      for (let i = 1; i <= this.totalPages; i++) {
        range.push(i)
      }
      return range
    }
  },
  methods: {
    prevPage() {
      if (this.currentPage > 1) this.currentPage--
    },
    nextPage() {
      if (this.currentPage < this.totalPages) this.currentPage++
    },
    goToPage(page) {
      this.currentPage = page
    }
  }
}
</script>

结合API请求实现动态分页

实际项目中通常需要从后端API获取分页数据。使用axios等HTTP库发送请求时,将当前页码和每页大小作为参数:

methods: {
  async fetchData() {
    try {
      const response = await axios.get('/api/items', {
        params: {
          page: this.currentPage,
          size: this.pageSize
        }
      })
      this.allData = response.data.items
      this.totalItems = response.data.total
    } catch (error) {
      console.error('获取数据失败:', error)
    }
  },
  goToPage(page) {
    this.currentPage = page
    this.fetchData()
  }
},
created() {
  this.fetchData()
}

优化分页UI体验

对于数据量大的情况,可以改进分页按钮的显示方式,避免展示过多页码。常见做法是显示当前页前后各2页,其余用省略号表示:

computed: {
  pageNumbers() {
    const range = []
    const start = Math.max(1, this.currentPage - 2)
    const end = Math.min(this.totalPages, this.currentPage + 2)

    if (start > 1) range.push(1)
    if (start > 2) range.push('...')

    for (let i = start; i <= end; i++) {
      range.push(i)
    }

    if (end < this.totalPages - 1) range.push('...')
    if (end < this.totalPages) range.push(this.totalPages)

    return range
  }
}

使用第三方分页组件

Vue生态中有许多成熟的分页组件可供选择,如Element UI的Pagination组件:

<template>
  <el-pagination
    @current-change="handleCurrentChange"
    :current-page="currentPage"
    :page-size="pageSize"
    :total="totalItems"
    layout="prev, pager, next">
  </el-pagination>
</template>

<script>
import { ElPagination } from 'element-plus'

export default {
  components: { ElPagination },
  methods: {
    handleCurrentChange(val) {
      this.currentPage = val
      this.fetchData()
    }
  }
}
</script>

处理分页查询参数

在需要保持分页状态的路由应用中,可以将分页参数同步到URL查询字符串中:

watch: {
  currentPage(newVal) {
    this.$router.push({
      query: { ...this.$route.query, page: newVal }
    })
  }
},
created() {
  if (this.$route.query.page) {
    this.currentPage = Number(this.$route.query.page)
  }
  this.fetchData()
}

vue中如何实现分页

分享给朋友:

相关文章

vue如何实现冒泡

vue如何实现冒泡

Vue 实现冒泡排序 在 Vue 中实现冒泡排序,可以通过数据绑定和响应式特性动态展示排序过程。以下是一个完整的实现示例,包含代码和详细说明。 数据准备 在 Vue 的 data 中定义一个数组作为…

vue实现下拉分页思想

vue实现下拉分页思想

实现下拉分页的核心思想 下拉分页(无限滚动)的核心是通过监听滚动事件,在用户滚动到接近底部时自动加载下一页数据。Vue中可以通过结合v-for渲染列表、计算滚动位置以及管理分页状态来实现。 监听滚动…

vue搜索过后实现分页

vue搜索过后实现分页

实现 Vue 搜索后分页的方法 数据绑定与搜索逻辑 在 Vue 组件中定义数据属性,包括原始数据列表、搜索关键词、分页相关参数: data() { return { originalLi…

vue如何实现放大缩小

vue如何实现放大缩小

Vue 实现放大缩小功能 在 Vue 中实现放大缩小功能可以通过多种方式实现,以下介绍几种常见的方法: 使用 CSS transform 缩放 通过绑定 CSS 的 transform: scale…

如何实现vue表格联动

如何实现vue表格联动

实现 Vue 表格联动的方法 数据绑定与响应式更新 通过 Vue 的响应式特性,将多个表格的数据绑定到同一个数据源或计算属性。当一个表格的数据发生变化时,另一个表格会自动更新。例如: data()…

vue如何实现默认页面

vue如何实现默认页面

Vue 实现默认页面的方法 在 Vue 项目中,通常需要设置一个默认页面(如首页或登录页)作为用户访问时的初始页面。可以通过路由配置实现。 配置路由默认跳转 在 Vue Router 中,使用 r…