当前位置:首页 > VUE

vue实现商品分页

2026-02-20 09:12:56VUE

Vue实现商品分页的方法

使用Element UI的分页组件

安装Element UI库后,可以直接使用其分页组件。在模板中添加el-pagination组件,通过v-model绑定当前页码,监听current-change事件处理分页逻辑。

<template>
  <div>
    <el-table :data="currentPageData">
      <!-- 表格内容 -->
    </el-table>
    <el-pagination
      @current-change="handleCurrentChange"
      :current-page="currentPage"
      :page-size="pageSize"
      :total="totalItems">
    </el-pagination>
  </div>
</template>
<script>
export default {
  data() {
    return {
      currentPage: 1,
      pageSize: 10,
      totalItems: 0,
      allData: [],
      currentPageData: []
    }
  },
  methods: {
    handleCurrentChange(page) {
      this.currentPage = page;
      this.updateCurrentPageData();
    },
    updateCurrentPageData() {
      const start = (this.currentPage - 1) * this.pageSize;
      const end = start + this.pageSize;
      this.currentPageData = this.allData.slice(start, end);
    }
  }
}
</script>

自定义分页实现

如果不使用UI库,可以手动实现分页功能。创建一个分页组件,包含页码按钮和导航控制。

<template>
  <div class="pagination">
    <button @click="prevPage" :disabled="currentPage === 1">上一页</button>
    <span v-for="page in pageNumbers" :key="page">
      <button @click="goToPage(page)" :class="{active: currentPage === page}">
        {{ page }}
      </button>
    </span>
    <button @click="nextPage" :disabled="currentPage === totalPages">下一页</button>
  </div>
</template>
<script>
export default {
  props: {
    totalItems: Number,
    itemsPerPage: Number,
    currentPage: Number
  },
  computed: {
    totalPages() {
      return Math.ceil(this.totalItems / this.itemsPerPage);
    },
    pageNumbers() {
      const pages = [];
      for (let i = 1; i <= this.totalPages; i++) {
        pages.push(i);
      }
      return pages;
    }
  },
  methods: {
    prevPage() {
      if (this.currentPage > 1) {
        this.$emit('page-changed', this.currentPage - 1);
      }
    },
    nextPage() {
      if (this.currentPage < this.totalPages) {
        this.$emit('page-changed', this.currentPage + 1);
      }
    },
    goToPage(page) {
      this.$emit('page-changed', page);
    }
  }
}
</script>

后端分页与API集成

对于大数据量,建议使用后端分页。发送请求时携带页码和每页数量参数,后端返回对应数据。

methods: {
  fetchProducts(page = 1) {
    axios.get('/api/products', {
      params: {
        page,
        per_page: this.pageSize
      }
    }).then(response => {
      this.currentPageData = response.data.data;
      this.totalItems = response.data.total;
    });
  },
  handlePageChange(page) {
    this.fetchProducts(page);
  }
}

优化分页体验

添加加载状态提示,避免页面切换时的空白。可以使用加载动画或骨架屏提升用户体验。

<template>
  <div>
    <div v-if="loading" class="loading">加载中...</div>
    <el-table v-else :data="currentPageData">
      <!-- 表格内容 -->
    </el-table>
  </div>
</template>
data() {
  return {
    loading: false
  }
},
methods: {
  async fetchProducts(page) {
    this.loading = true;
    try {
      const response = await axios.get('/api/products', {
        params: { page, per_page: this.pageSize }
      });
      this.currentPageData = response.data.data;
      this.totalItems = response.data.total;
    } finally {
      this.loading = false;
    }
  }
}

vue实现商品分页

标签: 分页商品
分享给朋友:

相关文章

vue实现商品布局

vue实现商品布局

Vue实现商品布局的方法 商品布局通常包括网格或列表展示、分页、筛选等功能。以下是基于Vue的实现方案: 基础结构搭建 使用Vue CLI或Vite创建项目,安装必要依赖如axios用于数据请求。…

php分页代码简单实现

php分页代码简单实现

基本分页实现 在PHP中实现分页功能通常需要结合MySQL的LIMIT子句。以下是一个基础实现示例: <?php // 数据库连接 $conn = mysqli_connect("local…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现分页功能代码

js实现分页功能代码

分页功能实现方法 客户端分页(前端处理数据) 适用于数据量较小且已全部加载到前端的情况。 // 示例数据 const data = Array.from({length: 100}, (_, i)…

vue前端实现分页

vue前端实现分页

实现分页的基本思路 在Vue中实现分页通常需要结合后端API返回的数据和前端的分页组件。核心逻辑包括计算总页数、处理当前页码变化以及动态加载数据。 使用Element UI的分页组件 Elemen…

vue实现搜索商品

vue实现搜索商品

Vue 实现商品搜索功能 在 Vue 中实现商品搜索功能,可以通过以下步骤完成。假设已有商品列表数据,需要实现前端搜索过滤功能。 数据准备 准备商品列表数据,通常从 API 获取或本地定义:…