当前位置:首页 > 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,展示商品详细信息。

<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管理购物车状态,实现添加、删除商品功能。

// 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>

商品分类筛选

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

vue实现商品

<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增删改查简单实现

基础环境搭建 确保已安装Node.js和Vue CLI。通过以下命令创建Vue项目: npm install -g @vue/cli vue create vue-crud-demo cd vue-…

vue实现活动倒计时

vue实现活动倒计时

实现活动倒计时的基本思路 在Vue中实现活动倒计时通常需要获取当前时间与活动结束时间的差值,并将其转换为天、小时、分钟、秒的格式展示。通过定时器每秒更新显示的时间。 定义倒计时数据 在Vue组件的d…

vue实现点击

vue实现点击

实现点击事件的基本方法 在Vue中实现点击事件可以通过v-on指令或@简写方式绑定。以下是常见的点击事件绑定方法: <template> <button v-on:click=…

vue 方法实现

vue 方法实现

在 Vue 中,方法的实现通常通过 methods 选项完成。以下是 Vue 方法实现的核心要点和示例: 基本方法定义 在 Vue 组件中定义方法时,需将函数声明放在 methods 对象内。这些方…

vue实现https

vue实现https

Vue 中实现 HTTPS 的步骤 在 Vue 项目中实现 HTTPS 主要涉及开发环境配置和生产环境部署。以下是具体方法: 开发环境配置(Vue CLI 或 Vite) 使用 mkcert 生成…

vue菜单实现

vue菜单实现

Vue 菜单实现方法 使用 Element UI 的菜单组件 Element UI 提供了现成的菜单组件,适合快速实现导航菜单。安装 Element UI 后,可以直接使用 el-menu 相关组件。…