当前位置:首页 > VUE

vue实现商品分页

2026-01-19 17:02:26VUE

Vue 实现商品分页的方法

基础分页实现

安装必要的依赖(如axios用于请求数据)

npm install axios

创建分页组件模板

<template>
  <div>
    <ul>
      <li v-for="item in items" :key="item.id">{{ item.name }}</li>
    </ul>
    <div class="pagination">
      <button @click="prevPage" :disabled="currentPage === 1">上一页</button>
      <span>第 {{ currentPage }} 页 / 共 {{ totalPages }} 页</span>
      <button @click="nextPage" :disabled="currentPage === totalPages">下一页</button>
    </div>
  </div>
</template>

数据逻辑处理

设置初始数据状态

data() {
  return {
    items: [],
    currentPage: 1,
    itemsPerPage: 10,
    totalItems: 0
  }
}

计算总页数

computed: {
  totalPages() {
    return Math.ceil(this.totalItems / this.itemsPerPage)
  }
}

API请求方法

实现获取分页数据的方法

vue实现商品分页

methods: {
  async fetchItems() {
    try {
      const response = await axios.get('/api/products', {
        params: {
          page: this.currentPage,
          limit: this.itemsPerPage
        }
      })
      this.items = response.data.items
      this.totalItems = response.data.total
    } catch (error) {
      console.error('获取数据失败:', error)
    }
  },
  nextPage() {
    if (this.currentPage < this.totalPages) {
      this.currentPage++
      this.fetchItems()
    }
  },
  prevPage() {
    if (this.currentPage > 1) {
      this.currentPage--
      this.fetchItems()
    }
  }
}

生命周期钩子

在组件挂载时加载初始数据

mounted() {
  this.fetchItems()
}

样式优化

添加基础分页样式

.pagination {
  margin-top: 20px;
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 15px;
}

button {
  padding: 5px 10px;
  cursor: pointer;
}

button:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

高级分页功能

实现页码跳转功能

vue实现商品分页

<input 
  type="number" 
  v-model.number="inputPage" 
  min="1" 
  :max="totalPages"
  @keyup.enter="goToPage"
>
<button @click="goToPage">跳转</button>

添加对应方法

data() {
  return {
    inputPage: 1
  }
},
methods: {
  goToPage() {
    const page = Math.max(1, Math.min(this.inputPage, this.totalPages))
    if (page !== this.currentPage) {
      this.currentPage = page
      this.fetchItems()
    }
  }
}

性能优化

添加加载状态

data() {
  return {
    isLoading: false
  }
},
methods: {
  async fetchItems() {
    this.isLoading = true
    try {
      // ...原有请求代码
    } finally {
      this.isLoading = false
    }
  }
}

在模板中添加加载指示器

<div v-if="isLoading">加载中...</div>

服务器端分页

确保后端API支持分页参数

// 示例Node.js后端处理
router.get('/api/products', async (req, res) => {
  const page = parseInt(req.query.page) || 1
  const limit = parseInt(req.query.limit) || 10
  const skip = (page - 1) * limit

  const items = await Product.find().skip(skip).limit(limit)
  const total = await Product.countDocuments()

  res.json({ items, total })
})

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

相关文章

vue 分页的实现

vue 分页的实现

Vue 分页的实现方法 使用 Element UI 的分页组件 安装 Element UI: npm install element-ui 在 Vue 项目中引入 Element UI 的分页组件:…

vue实现商品列表

vue实现商品列表

Vue实现商品列表的方法 使用Vue实现商品列表需要结合数据绑定、组件化和状态管理。以下是实现商品列表的几种常见方法: 基础数据绑定实现 在Vue组件中定义商品数据数组,使用v-for指令循环渲染商…

vue分页实现

vue分页实现

Vue 分页实现方法 基础分页组件实现 创建一个简单的分页组件,包含上一页、下一页和页码按钮。组件接收当前页码、总页数等参数,通过事件通知父组件页码变化。 <template> &l…

php实现分页功能

php实现分页功能

PHP实现分页功能的方法 数据库查询与分页逻辑 使用SQL的LIMIT和OFFSET实现分页。假设每页显示10条数据,当前页码为$page: $perPage = 10; $page = isset…

uniapp商品列表

uniapp商品列表

商品列表实现方法 在uniapp中实现商品列表功能,可以通过多种方式完成,以下是几种常见的方法: 使用scroll-view组件实现滚动列表 <scroll-view scroll-y="t…

php分页功能的实现

php分页功能的实现

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