当前位置:首页 > VUE

vue实现分页按钮

2026-03-09 11:02:25VUE

实现分页按钮的基本思路

在Vue中实现分页按钮需要结合数据绑定和事件处理。通常需要一个当前页码(currentPage)和总页数(totalPages)的状态,通过计算属性或方法生成页码数组,并用v-for渲染按钮。

vue实现分页按钮

定义数据与计算属性

data() {
  return {
    currentPage: 1,
    totalItems: 100,
    itemsPerPage: 10
  }
},
computed: {
  totalPages() {
    return Math.ceil(this.totalItems / this.itemsPerPage)
  },
  pages() {
    const range = [];
    const start = Math.max(1, this.currentPage - 2);
    const end = Math.min(this.totalPages, this.currentPage + 2);

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

模板渲染

<template>
  <div class="pagination">
    <button 
      @click="changePage(currentPage - 1)"
      :disabled="currentPage === 1"
    >
      上一页
    </button>

    <button 
      v-for="page in pages" 
      :key="page"
      @click="changePage(page)"
      :class="{ active: currentPage === page }"
    >
      {{ page }}
    </button>

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

方法实现

methods: {
  changePage(page) {
    if (page >= 1 && page <= this.totalPages) {
      this.currentPage = page;
      this.$emit('page-changed', page); // 可选:触发父组件事件
    }
  }
}

样式优化

添加CSS增强交互体验:

vue实现分页按钮

.pagination {
  display: flex;
  gap: 5px;
  margin-top: 20px;
}
.pagination button {
  padding: 5px 10px;
  border: 1px solid #ddd;
  background: white;
  cursor: pointer;
}
.pagination button:hover:not(:disabled) {
  background: #eee;
}
.pagination button.active {
  background: #42b983;
  color: white;
  border-color: #42b983;
}
.pagination button:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

高级功能扩展

对于大量数据的分页,可以添加省略号逻辑:

computed: {
  pages() {
    const range = [];
    const delta = 2;
    const left = this.currentPage - delta;
    const right = this.currentPage + delta;

    for (let i = 1; i <= this.totalPages; i++) {
      if (
        i === 1 ||
        i === this.totalPages ||
        (i >= left && i <= right) ||
        (i === left - 1 && left > 2) ||
        (i === right + 1 && right < this.totalPages - 1)
      ) {
        range.push(i);
      } else if (range[range.length - 1] !== '...') {
        range.push('...');
      }
    }
    return range;
  }
}

模板中需要对应处理省略号:

<template>
  <span v-if="page === '...'">...</span>
  <button v-else ...></button>
</template>

标签: 分页按钮
分享给朋友:

相关文章

vue实现按钮弹窗

vue实现按钮弹窗

实现按钮弹窗的基本方法 在Vue中实现按钮点击触发弹窗功能,可以通过多种方式完成。以下是几种常见实现方法: 使用原生HTML和Vue指令 通过v-if或v-show控制弹窗显示状态,结合点击事件切换…

vue实现页面分页

vue实现页面分页

Vue实现页面分页的方法 使用Element UI的分页组件 Element UI提供了现成的分页组件el-pagination,适合快速集成。以下是一个示例代码: <template>…

php实现的分页

php实现的分页

PHP 实现分页的方法 基本分页逻辑 分页的核心在于计算总页数、当前页码以及数据偏移量。假设每页显示 10 条数据: $current_page = isset($_GET['page']) ? (…

uniapp 分页组件

uniapp 分页组件

uniapp 分页组件实现方法 在uniapp中实现分页功能,可以通过自定义组件或使用第三方组件库完成。以下是几种常见实现方式: 自定义分页组件 创建一个名为uni-pagination的组件,模板…

vue实现后台分页

vue实现后台分页

Vue 实现后台分页的方法 分页组件与数据绑定 在 Vue 中实现后台分页通常需要结合分页组件和后端 API。使用 el-pagination(Element UI)或自定义分页组件,通过 v-mod…

vue 实现数据分页

vue 实现数据分页

实现数据分页的基本思路 在Vue中实现数据分页通常需要结合前端分页逻辑和后端API支持。前端分页适合数据量较小的情况,后端分页适合大数据量场景。 前端分页实现 创建一个计算属性来分割当前页数据:…