当前位置:首页 > VUE

vue实现简单商品列表

2026-01-22 20:41:21VUE

实现商品列表的基本结构

在Vue中实现商品列表,需要创建一个组件来展示商品数据。通常使用v-for指令循环渲染商品列表。

<template>
  <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.price }}</p>
    </div>
  </div>
</template>

定义商品数据

商品数据可以定义在组件的data选项中,或者从API获取。以下是一个静态数据示例:

<script>
export default {
  data() {
    return {
      products: [
        { id: 1, name: '商品1', price: '¥100', image: 'image1.jpg' },
        { id: 2, name: '商品2', price: '¥200', image: 'image2.jpg' },
        { id: 3, name: '商品3', price: '¥300', image: 'image3.jpg' }
      ]
    }
  }
}
</script>

添加样式

为商品列表和商品项添加基本样式,确保布局美观。

vue实现简单商品列表

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

.product-item {
  border: 1px solid #ddd;
  padding: 10px;
  text-align: center;
}

.product-item img {
  max-width: 100%;
  height: auto;
}
</style>

动态加载商品数据

如果需要从API加载商品数据,可以使用axiosfetchcreatedmounted钩子中获取数据。

<script>
import axios from 'axios';

export default {
  data() {
    return {
      products: []
    }
  },
  mounted() {
    axios.get('https://api.example.com/products')
      .then(response => {
        this.products = response.data;
      })
      .catch(error => {
        console.error('加载商品数据失败:', error);
      });
  }
}
</script>

添加商品交互功能

可以为商品列表添加点击事件或购物车功能,增强用户交互。

vue实现简单商品列表

<template>
  <div class="product-list">
    <div 
      v-for="product in products" 
      :key="product.id" 
      class="product-item"
      @click="addToCart(product)"
    >
      <img :src="product.image" :alt="product.name">
      <h3>{{ product.name }}</h3>
      <p>{{ product.price }}</p>
      <button>加入购物车</button>
    </div>
  </div>
</template>
<script>
export default {
  methods: {
    addToCart(product) {
      this.$emit('add-to-cart', product);
    }
  }
}
</script>

使用Vuex管理状态

如果项目复杂,可以使用Vuex管理商品和购物车状态。

import Vuex from 'vuex';

const store = new Vuex.Store({
  state: {
    products: [],
    cart: []
  },
  mutations: {
    setProducts(state, products) {
      state.products = products;
    },
    addToCart(state, product) {
      state.cart.push(product);
    }
  },
  actions: {
    fetchProducts({ commit }) {
      axios.get('https://api.example.com/products')
        .then(response => {
          commit('setProducts', response.data);
        });
    }
  }
});

商品列表分页

对于大量商品数据,可以实现分页功能。

<template>
  <div>
    <div class="product-list">
      <!-- 商品列表 -->
    </div>
    <div class="pagination">
      <button 
        v-for="page in totalPages" 
        :key="page"
        @click="goToPage(page)"
      >
        {{ page }}
      </button>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      currentPage: 1,
      itemsPerPage: 10,
      totalItems: 100
    }
  },
  computed: {
    totalPages() {
      return Math.ceil(this.totalItems / this.itemsPerPage);
    }
  },
  methods: {
    goToPage(page) {
      this.currentPage = page;
      this.fetchProducts();
    },
    fetchProducts() {
      const start = (this.currentPage - 1) * this.itemsPerPage;
      const end = start + this.itemsPerPage;
      axios.get(`https://api.example.com/products?_start=${start}&_end=${end}`)
        .then(response => {
          this.products = response.data;
        });
    }
  }
}
</script>

分享给朋友:

相关文章

vue实现列表

vue实现列表

实现列表的基本方法 在Vue中实现列表通常使用v-for指令,这是Vue的核心功能之一。v-for可以遍历数组或对象,为每个元素生成对应的DOM节点。 <template> <…

vue实现列表过渡

vue实现列表过渡

vue实现列表过渡的方法 在Vue中,可以使用内置的<transition-group>组件来实现列表项的过渡效果。该组件专门为动态列表设计,能够处理元素的添加、删除和顺序变化。 基本用…

vue实现索引列表

vue实现索引列表

Vue 实现索引列表 使用第三方库(如 better-scroll 或 vue-index-list) 安装 better-scroll 或 vue-index-list 库,可以快速实现带索引的列表…

vue实现列表高亮

vue实现列表高亮

Vue 列表高亮实现方法 动态类绑定 通过 v-bind:class 或简写 :class 实现条件高亮 <template> <ul> <li…

vue 实现列表全选

vue 实现列表全选

实现列表全选功能 在Vue中实现列表全选功能,可以通过绑定数据和事件处理来实现。以下是一个完整的示例代码: <template> <div> <input…

vue实现城市列表排序

vue实现城市列表排序

Vue 实现城市列表排序 数据准备 确保城市数据以数组形式存储,每个城市对象包含名称或其他排序依据的字段。例如: data() { return { cities: [ {…