…">
当前位置:首页 > VUE

vue实现分页页面

2026-02-24 02:08:23VUE

Vue 分页实现方法

基础分页组件实现

创建一个可复用的分页组件 Pagination.vue

<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: currentPage === page }"
      >
        {{ page }}
      </button>
    </span>

    <button 
      @click="changePage(currentPage + 1)" 
      :disabled="currentPage === totalPages"
    >
      下一页
    </button>
  </div>
</template>

<script>
export default {
  props: {
    totalItems: {
      type: Number,
      required: true
    },
    itemsPerPage: {
      type: Number,
      default: 10
    },
    currentPage: {
      type: Number,
      default: 1
    }
  },
  computed: {
    totalPages() {
      return Math.ceil(this.totalItems / this.itemsPerPage)
    },
    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-changed', page)
      }
    }
  }
}
</script>

<style>
.pagination button {
  margin: 0 5px;
  padding: 5px 10px;
}
.pagination button.active {
  background-color: #42b983;
  color: white;
}
</style>

在父组件中使用分页

<template>
  <div>
    <!-- 数据列表 -->
    <ul>
      <li v-for="item in paginatedData" :key="item.id">
        {{ item.name }}
      </li>
    </ul>

    <!-- 分页组件 -->
    <Pagination
      :total-items="data.length"
      :items-per-page="itemsPerPage"
      :current-page="currentPage"
      @page-changed="handlePageChange"
    />
  </div>
</template>

<script>
import Pagination from './Pagination.vue'

export default {
  components: { Pagination },
  data() {
    return {
      data: [], // 从API获取的数据
      itemsPerPage: 10,
      currentPage: 1
    }
  },
  computed: {
    paginatedData() {
      const start = (this.currentPage - 1) * this.itemsPerPage
      const end = start + this.itemsPerPage
      return this.data.slice(start, end)
    }
  },
  methods: {
    handlePageChange(page) {
      this.currentPage = page
    },
    fetchData() {
      // API请求获取数据
      // this.data = response.data
    }
  },
  created() {
    this.fetchData()
  }
}
</script>

高级分页功能实现

对于大量数据的分页显示,可以添加页码省略功能:

vue实现分页页面

// 在Pagination组件的computed中替换pages计算属性
pages() {
  const range = []
  const current = this.currentPage
  const total = this.totalPages
  const delta = 2 // 显示当前页前后多少页

  range.push(1)
  if (current - delta > 2) {
    range.push('...')
  }

  for (let i = Math.max(2, current - delta); i <= Math.min(total - 1, current + delta); i++) {
    range.push(i)
  }

  if (current + delta < total - 1) {
    range.push('...')
  }
  if (total > 1) {
    range.push(total)
  }

  return range
}

与后端API集成

当需要从后端获取分页数据时:

methods: {
  async fetchData() {
    try {
      const response = await axios.get('/api/items', {
        params: {
          page: this.currentPage,
          per_page: this.itemsPerPage
        }
      })
      this.data = response.data.items
      this.totalItems = response.data.total_count
    } catch (error) {
      console.error('获取数据失败:', error)
    }
  },
  handlePageChange(page) {
    this.currentPage = page
    this.fetchData()
  }
}

使用第三方库

可以考虑使用现成的分页组件库:

vue实现分页页面

  • v-pagination (轻量级)
  • element-uiel-pagination
  • vuetifyv-pagination

安装示例(使用v-pagination):

npm install v-pagination

使用方式:

<template>
  <pagination
    v-model="currentPage"
    :records="totalItems"
    :per-page="itemsPerPage"
    @paginate="fetchData"
  />
</template>

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

相关文章

jquery 分页

jquery 分页

实现 jQuery 分页的方法 客户端分页实现 使用 jQuery 实现客户端分页的核心思路是通过 JavaScript 控制数据的显示与隐藏。假设有一个包含数据的 HTML 列表或表格: // 分…

php分页功能的实现

php分页功能的实现

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

实现js页面跳转页面跳转页面

实现js页面跳转页面跳转页面

使用 window.location.href 实现跳转 通过修改 window.location.href 属性,可以直接跳转到目标 URL。这种方法会触发页面刷新,并在浏览器历史记录中留下记录。…

vue分页实现原理

vue分页实现原理

Vue 分页实现原理 Vue 分页的核心原理是通过计算当前页的数据范围,动态渲染数据列表并控制分页组件的交互。以下是关键实现步骤: 数据分片计算 分页需要根据当前页码和每页条数截取数据。假设原始数据…

vue单页面 实现

vue单页面 实现

Vue 单页面应用(SPA)实现方法 Vue.js 是一个渐进式 JavaScript 框架,非常适合构建单页面应用(SPA)。以下是实现 Vue SPA 的关键步骤和方法。 初始化项目 使用 Vu…

vue登录页面实现

vue登录页面实现

实现Vue登录页面的基本步骤 创建Login.vue文件作为登录组件,包含表单元素(用户名/密码输入框、提交按钮)。使用v-model双向绑定数据,通过@submit.prevent阻止默认表单提交行…