当前位置:首页 > VUE

vue实现商品展示

2026-01-17 21:13:09VUE

使用 Vue 实现商品展示

商品数据准备

商品数据可以存储在 Vue 组件的 data 中,或者通过 API 从后端获取。以下是一个简单的商品数据示例:

data() {
  return {
    products: [
      {
        id: 1,
        name: '商品1',
        price: 100,
        image: 'product1.jpg',
        description: '商品1的描述'
      },
      {
        id: 2,
        name: '商品2',
        price: 200,
        image: 'product2.jpg',
        description: '商品2的描述'
      }
    ]
  }
}

商品列表渲染

使用 v-for 指令遍历商品数据,动态生成商品列表:

<div class="product-list">
  <div v-for="product in products" :key="product.id" class="product-item">
    <img :src="product.image" :alt="product.name">
    <h3>{{ product.name }}</h3>
    <p>{{ product.description }}</p>
    <span>{{ product.price }}元</span>
  </div>
</div>

商品样式设计

通过 CSS 为商品列表添加样式,使其更具吸引力:

.product-list {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
  gap: 20px;
}

.product-item {
  border: 1px solid #ddd;
  padding: 15px;
  border-radius: 5px;
  transition: transform 0.3s;
}

.product-item:hover {
  transform: translateY(-5px);
  box-shadow: 0 5px 15px rgba(0,0,0,0.1);
}

.product-item img {
  width: 100%;
  height: 200px;
  object-fit: cover;
  border-radius: 5px;
}

商品筛选功能

添加筛选功能,例如按价格或类别筛选商品:

data() {
  return {
    products: [...],
    filters: {
      priceRange: [0, 1000],
      category: ''
    }
  }
},
computed: {
  filteredProducts() {
    return this.products.filter(product => {
      return product.price >= this.filters.priceRange[0] && 
             product.price <= this.filters.priceRange[1] &&
             (this.filters.category === '' || product.category === this.filters.category)
    })
  }
}

商品分页展示

对于大量商品,可以实现分页功能:

data() {
  return {
    currentPage: 1,
    itemsPerPage: 8
  }
},
computed: {
  paginatedProducts() {
    const start = (this.currentPage - 1) * this.itemsPerPage
    const end = start + this.itemsPerPage
    return this.filteredProducts.slice(start, end)
  },
  totalPages() {
    return Math.ceil(this.filteredProducts.length / this.itemsPerPage)
  }
}

商品详情页

创建商品详情组件,展示商品的详细信息:

<template>
  <div class="product-detail">
    <img :src="product.image" :alt="product.name">
    <h1>{{ product.name }}</h1>
    <p class="price">{{ product.price }}元</p>
    <p class="description">{{ product.description }}</p>
    <button @click="addToCart">加入购物车</button>
  </div>
</template>

<script>
export default {
  props: ['product'],
  methods: {
    addToCart() {
      this.$emit('add-to-cart', this.product)
    }
  }
}
</script>

商品搜索功能

实现商品搜索功能,让用户可以通过关键词查找商品:

vue实现商品展示

data() {
  return {
    searchQuery: ''
  }
},
computed: {
  searchedProducts() {
    if (!this.searchQuery) return this.products
    const query = this.searchQuery.toLowerCase()
    return this.products.filter(product => 
      product.name.toLowerCase().includes(query) || 
      product.description.toLowerCase().includes(query)
    )
  }
}

这些方法可以帮助快速实现一个功能完善的商品展示页面,根据实际需求可以进一步扩展功能。

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

相关文章

vue 实现滚动

vue 实现滚动

实现滚动的基本方法 在Vue中实现滚动效果可以通过多种方式完成,包括使用原生JavaScript、CSS或第三方库。以下是一些常见的方法: 使用window.scrollTo方法实现页面滚动 可以通…

computed vue 实现

computed vue 实现

computed 在 Vue 中的基本用法 Vue 的 computed 属性用于声明依赖于其他数据的计算属性。当依赖的数据变化时,计算属性会自动重新计算并缓存结果。 export defaul…

vue实现定时

vue实现定时

Vue 实现定时功能的方法 使用 setInterval 和 clearInterval 在 Vue 中可以通过 setInterval 和 clearInterval 实现定时功能。在组件的 mou…

vue实现portal

vue实现portal

Vue 实现 Portal 功能 Portal 是一种将子节点渲染到父组件 DOM 层级之外的 DOM 节点的技术,常用于实现模态框、弹出层等需要脱离当前组件层级的场景。Vue 可以通过多种方式实现…

lua 实现vue

lua 实现vue

在 Lua 中实现类似 Vue 的响应式框架需要模拟 Vue 的核心功能,包括数据绑定、模板渲染和依赖追踪。以下是实现的关键思路和代码示例: 响应式数据绑定 使用 Lua 的 __index 和 _…

vue实现秒表

vue实现秒表

实现秒表功能 在Vue中实现秒表功能需要处理时间显示、开始、暂停和重置逻辑。以下是具体实现方式: 基础实现代码 <template> <div> <div&…