当前位置:首页 > VUE

vue实现商品

2026-02-10 04:04:02VUE

Vue实现商品功能

商品列表展示

使用v-for指令循环渲染商品列表,结合计算属性实现筛选或排序功能。

<template>
  <div class="product-list">
    <div v-for="product in filteredProducts" :key="product.id" class="product-item">
      <img :src="product.image" :alt="product.name">
      <h3>{{ product.name }}</h3>
      <p>价格: {{ product.price }}</p>
      <button @click="addToCart(product)">加入购物车</button>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      products: [
        { id: 1, name: '商品1', price: 100, image: 'path/to/image1.jpg' },
        { id: 2, name: '商品2', price: 200, image: 'path/to/image2.jpg' }
      ],
      searchQuery: ''
    }
  },
  computed: {
    filteredProducts() {
      return this.products.filter(product => 
        product.name.includes(this.searchQuery)
      )
    }
  },
  methods: {
    addToCart(product) {
      this.$emit('add-to-cart', product)
    }
  }
}
</script>

商品详情页

通过路由参数获取商品ID,展示商品详细信息。

vue实现商品

<template>
  <div class="product-detail">
    <h2>{{ product.name }}</h2>
    <img :src="product.image" :alt="product.name">
    <p>价格: {{ product.price }}</p>
    <p>描述: {{ product.description }}</p>
    <button @click="addToCart(product)">加入购物车</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      product: {}
    }
  },
  created() {
    const productId = this.$route.params.id
    this.fetchProduct(productId)
  },
  methods: {
    fetchProduct(id) {
      // API调用获取商品详情
      this.product = { id: id, name: '商品详情', price: 100, description: '商品详细描述' }
    },
    addToCart(product) {
      this.$store.dispatch('cart/addToCart', product)
    }
  }
}
</script>

购物车功能

使用Vuex管理购物车状态,实现添加、删除商品功能。

vue实现商品

// store/modules/cart.js
export default {
  state: {
    items: []
  },
  mutations: {
    ADD_ITEM(state, product) {
      const existingItem = state.items.find(item => item.id === product.id)
      if (existingItem) {
        existingItem.quantity++
      } else {
        state.items.push({ ...product, quantity: 1 })
      }
    },
    REMOVE_ITEM(state, productId) {
      state.items = state.items.filter(item => item.id !== productId)
    }
  },
  actions: {
    addToCart({ commit }, product) {
      commit('ADD_ITEM', product)
    },
    removeFromCart({ commit }, productId) {
      commit('REMOVE_ITEM', productId)
    }
  },
  getters: {
    cartItems: state => state.items,
    cartTotal: state => {
      return state.items.reduce((total, item) => {
        return total + (item.price * item.quantity)
      }, 0)
    }
  }
}

商品搜索功能

结合计算属性和watch实现实时搜索功能。

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索商品">
    <ul>
      <li v-for="product in searchResults" :key="product.id">
        {{ product.name }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      allProducts: [],
      searchResults: []
    }
  },
  watch: {
    searchQuery(newVal) {
      this.searchProducts(newVal)
    }
  },
  methods: {
    searchProducts(query) {
      if (query.trim() === '') {
        this.searchResults = this.allProducts
        return
      }
      this.searchResults = this.allProducts.filter(product =>
        product.name.toLowerCase().includes(query.toLowerCase())
      )
    }
  }
}
</script>

商品分类筛选

使用计算属性实现商品分类筛选功能。

<template>
  <div>
    <select v-model="selectedCategory">
      <option value="">所有分类</option>
      <option v-for="category in categories" :value="category.id" :key="category.id">
        {{ category.name }}
      </option>
    </select>
    <div v-for="product in filteredByCategory" :key="product.id">
      {{ product.name }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedCategory: '',
      categories: [
        { id: 1, name: '电子产品' },
        { id: 2, name: '服装' }
      ],
      products: [
        { id: 1, name: '手机', categoryId: 1 },
        { id: 2, name: 'T恤', categoryId: 2 }
      ]
    }
  },
  computed: {
    filteredByCategory() {
      if (!this.selectedCategory) return this.products
      return this.products.filter(
        product => product.categoryId == this.selectedCategory
      )
    }
  }
}
</script>

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

相关文章

vue实现生成二维码

vue实现生成二维码

使用qrcode.vue库生成二维码 安装qrcode.vue库: npm install qrcode.vue --save 在Vue组件中使用: <template> <…

vue实现alert

vue实现alert

实现自定义 Alert 组件 在 Vue 中可以通过组件化方式实现自定义 Alert 弹窗。以下是基于 Vue 3 的实现示例: 组件代码 (Alert.vue) <template>…

vue实现app

vue实现app

Vue 实现 App 的常见方法 使用 Vue 开发移动端 App 主要有两种主流方案:混合开发(Hybrid)和原生渲染。以下是具体实现方式和工具链: 混合开发方案(WebView 嵌入) 通过…

vue实现盖章

vue实现盖章

Vue 实现盖章功能 在Vue中实现盖章功能通常涉及前端UI交互,通过Canvas或SVG绘制印章,并允许用户拖拽或点击放置印章。以下是具体实现方法: 使用Canvas绘制印章 通过HTML5的Ca…

vue实现 toast

vue实现 toast

Vue 实现 Toast 组件 在 Vue 中实现 Toast 组件可以通过多种方式完成,以下是几种常见的方法: 使用全局组件和事件总线 创建一个全局的 Toast 组件,并通过事件总线或 Vue…

vue 实现打印

vue 实现打印

Vue 实现打印功能的方法 在Vue项目中实现打印功能,可以通过以下几种方式实现: 使用window.print()方法 通过调用浏览器的原生打印API实现基础打印功能,适用于简单内容打印。 //…