当前位置:首页 > VUE

vue实现商品卡片列表

2026-02-21 15:31:21VUE

实现商品卡片列表的基本结构

使用 Vue 的 v-for 指令循环渲染商品卡片列表。确保数据来源于一个数组,并通过 props 或直接绑定数据到组件。

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

数据定义与初始化

在 Vue 组件的 dataprops 中定义商品数据。如果是动态数据,可以通过 API 请求获取。

vue实现商品卡片列表

<script>
export default {
  data() {
    return {
      products: [
        {
          id: 1,
          name: "商品1",
          description: "商品描述",
          price: 99.9,
          image: "https://example.com/product1.jpg"
        },
        {
          id: 2,
          name: "商品2",
          description: "商品描述",
          price: 199.9,
          image: "https://example.com/product2.jpg"
        }
      ]
    };
  },
  methods: {
    addToCart(product) {
      // 处理加入购物车逻辑
      console.log("Added to cart:", product);
    }
  }
};
</script>

样式设计与布局

使用 CSS 或 CSS 框架(如 Tailwind、Bootstrap)美化商品卡片列表。确保布局适配不同屏幕尺寸。

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

.product-card {
  border: 1px solid #ddd;
  border-radius: 8px;
  padding: 15px;
  text-align: center;
  transition: transform 0.3s;
}

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

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

.price {
  font-weight: bold;
  color: #e63946;
  display: block;
  margin: 10px 0;
}

button {
  background-color: #4CAF50;
  color: white;
  border: none;
  padding: 8px 16px;
  border-radius: 4px;
  cursor: pointer;
}

button:hover {
  background-color: #45a049;
}
</style>

动态加载商品数据

通过 API 请求动态加载商品数据,使用 axios 或其他 HTTP 客户端库。

vue实现商品卡片列表

<script>
import axios from 'axios';

export default {
  data() {
    return {
      products: []
    };
  },
  async created() {
    try {
      const response = await axios.get('https://api.example.com/products');
      this.products = response.data;
    } catch (error) {
      console.error("Failed to fetch products:", error);
    }
  }
};
</script>

分页与加载更多功能

实现分页或无限滚动加载更多商品的功能,提升用户体验。

<script>
export default {
  data() {
    return {
      products: [],
      page: 1,
      loading: false,
      hasMore: true
    };
  },
  methods: {
    async loadMore() {
      if (this.loading || !this.hasMore) return;
      this.loading = true;
      try {
        const response = await axios.get(`https://api.example.com/products?page=${this.page}`);
        if (response.data.length === 0) {
          this.hasMore = false;
        } else {
          this.products = [...this.products, ...response.data];
          this.page++;
        }
      } catch (error) {
        console.error("Failed to load more products:", error);
      } finally {
        this.loading = false;
      }
    }
  },
  mounted() {
    window.addEventListener('scroll', () => {
      if (window.innerHeight + window.scrollY >= document.body.offsetHeight - 500) {
        this.loadMore();
      }
    });
  }
};
</script>

商品筛选与排序

添加筛选和排序功能,允许用户按价格、类别等条件筛选商品。

<template>
  <div>
    <div class="filters">
      <select v-model="sortBy" @change="sortProducts">
        <option value="price_asc">价格从低到高</option>
        <option value="price_desc">价格从高到低</option>
      </select>
    </div>
    <div class="product-list">
      <!-- 商品卡片列表 -->
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      sortBy: 'price_asc'
    };
  },
  methods: {
    sortProducts() {
      if (this.sortBy === 'price_asc') {
        this.products.sort((a, b) => a.price - b.price);
      } else if (this.sortBy === 'price_desc') {
        this.products.sort((a, b) => b.price - a.price);
      }
    }
  }
};
</script>

标签: 卡片商品
分享给朋友:

相关文章

vue实现商品全选

vue实现商品全选

实现全选功能的基本思路 在Vue中实现商品全选功能,通常需要维护一个商品列表数据和一个选中状态数组。通过计算属性判断是否全选,通过方法控制全选或取消全选。 定义数据模型 data() {…

vue 实现商品页面

vue 实现商品页面

实现商品页面的基本步骤 使用Vue.js实现商品页面需要结合组件化开发、数据绑定和路由等功能。以下是一个典型实现方案: 商品数据管理 商品数据通常存储在Vuex或Pinia状态管理中,也可以通过AP…

vue实现商品切换

vue实现商品切换

实现商品切换功能 在Vue中实现商品切换功能通常涉及数据绑定、事件处理和动态渲染。以下是几种常见方法: 数据驱动切换 创建商品数据数组和当前索引,通过修改索引实现切换: data() { re…

vue实现商品规格

vue实现商品规格

商品规格的数据结构设计 商品规格通常采用树形结构,包含规格组(如颜色、尺寸)和规格项(如红色、XL)。数据结构可设计为: specs: [ { name: '颜色', items…

vue实现卡片拖动

vue实现卡片拖动

Vue 实现卡片拖动的几种方法 使用 HTML5 拖放 API HTML5 提供了原生的拖放 API,可以在 Vue 中直接使用。通过 draggable 属性标记可拖动的元素,并监听 dragsta…

vue实现商品卡片

vue实现商品卡片

Vue 实现商品卡片 在 Vue 中实现商品卡片可以通过组件化的方式完成,以下是一个完整的实现方案: 商品卡片组件 <template> <div class="product…