当前位置:首页 > VUE

vue 分页功能实现

2026-03-08 14:41:59VUE

Vue 分页功能实现

分页组件基础结构

创建一个独立的 Pagination.vue 组件,包含页码按钮、上一页/下一页导航等功能。核心模板结构如下:

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

计算属性设计

通过计算属性动态生成页码数组,并处理边界情况:

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;
  }
}

分页逻辑方法

实现页面跳转的核心方法:

methods: {
  goToPage(page) {
    if (page !== this.currentPage) {
      this.$emit('page-changed', page);
    }
  },
  prevPage() {
    if (this.currentPage > 1) {
      this.goToPage(this.currentPage - 1);
    }
  },
  nextPage() {
    if (this.currentPage < this.totalPages) {
      this.goToPage(this.currentPage + 1);
    }
  }
}

父组件集成

在父组件中绑定分页事件并处理数据分片:

vue 分页功能实现

<template>
  <div>
    <table>
      <!-- 显示当前页数据 -->
      <tr v-for="item in paginatedData" :key="item.id">
        <td>{{ item.name }}</td>
      </tr>
    </table>
    <Pagination 
      :total-items="data.length" 
      :items-per-page="10"
      :current-page="currentPage"
      @page-changed="handlePageChange"
    />
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentPage: 1,
      data: [] // 原始数据
    }
  },
  computed: {
    paginatedData() {
      const start = (this.currentPage - 1) * 10;
      const end = start + 10;
      return this.data.slice(start, end);
    }
  },
  methods: {
    handlePageChange(page) {
      this.currentPage = page;
    }
  }
}
</script>

样式优化

添加基础样式增强用户体验:

.pagination button {
  margin: 0 5px;
  padding: 5px 10px;
  border: 1px solid #ddd;
  background: white;
}
.pagination button.active {
  background: #42b983;
  color: white;
}
.pagination button:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

后端分页实现(可选)

如需对接后端API,修改分页事件处理:

vue 分页功能实现

methods: {
  async handlePageChange(page) {
    this.currentPage = page;
    const res = await axios.get('/api/data', {
      params: {
        page,
        size: 10
      }
    });
    this.data = res.data.items;
    this.totalItems = res.data.total;
  }
}

高级功能扩展

  1. 每页条数选择器

    <select v-model="itemsPerPage" @change="resetPagination">
    <option value="10">10条/页</option>
    <option value="20">20条/页</option>
    </select>
  2. 跳转到指定页码

    <input 
    type="number" 
    :min="1" 
    :max="totalPages" 
    v-model="jumpPage"
    @keyup.enter="goToPage(jumpPage)"
    >
  3. 添加省略号显示 在计算属性中处理页码范围时,可以添加 ... 指示符:

    if (start > 1) range.unshift('...');
    if (end < this.totalPages) range.push('...');

标签: 分页功能
分享给朋友:

相关文章

vue实现考试多选功能

vue实现考试多选功能

Vue实现考试多选功能 数据绑定与选项渲染 使用v-model绑定用户选择的答案数组,结合v-for循环渲染选项列表。示例代码: <template> <div>…

前端实现拖拽功能vue

前端实现拖拽功能vue

使用 HTML5 拖放 API 在 Vue 中可以通过 HTML5 的原生拖放 API 实现拖拽功能。需要监听 dragstart、dragover 和 drop 事件。 <template&…

vue  实现分页

vue 实现分页

实现分页功能 在Vue中实现分页功能通常需要结合后端API或前端数据处理。以下是两种常见的实现方式: 前端分页实现 适用于数据量较小的情况,所有数据一次性加载到前端后进行分页处理: <tem…

vue 实现筛选功能

vue 实现筛选功能

实现筛选功能的基本思路 在Vue中实现筛选功能通常涉及以下几个核心步骤:数据绑定、筛选逻辑处理、结果展示。以下是具体实现方法。 数据准备与绑定 准备一个包含所有数据的数组,并使用v-model或v-…

vue elementui实现分页

vue elementui实现分页

Vue + ElementUI 分页实现方法 安装与引入 确保已安装 ElementUI,可通过 npm 或 yarn 安装: npm install element-ui 在 main.js 中全…

php购物车功能实现

php购物车功能实现

数据库设计 购物车功能通常需要设计数据库表来存储商品和用户信息。常见的表包括: products 表:存储商品信息,如商品ID、名称、价格、库存等。 users 表:存储用户信息,如用户ID、用户名…