当前位置:首页 > 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实现商品功能的方法 在Vue中实现商品功能通常涉及商品列表展示、商品详情、购物车操作等模块。以下是几种常见的实现方式: 商品列表展示 使用v-for指令循环渲染商品数据,结合Vue的响应式特性…

vue实现卡片

vue实现卡片

Vue实现卡片的基本方法 使用Vue实现卡片组件可以通过多种方式,以下是几种常见的方法: 使用原生HTML和CSS结合Vue数据绑定 <template> <div clas…

vue实现搜索商品

vue实现搜索商品

Vue 实现商品搜索功能 在 Vue 中实现商品搜索功能,可以通过以下步骤完成。假设已有商品列表数据,需要实现前端搜索过滤功能。 数据准备 准备商品列表数据,通常从 API 获取或本地定义:…

vue实现探探卡片

vue实现探探卡片

Vue 实现探探卡片效果 探探卡片的交互效果主要包括卡片堆叠、左右滑动、缩放和旋转动画。以下是基于 Vue 3 的实现方法: 核心组件结构 使用 v-for 渲染卡片列表,通过 CSS 绝对定位实…

vue实现增加商品

vue实现增加商品

使用 Vue 实现商品添加功能 实现步骤 1. 创建商品表单组件 开发一个商品表单组件,包含商品名称、价格、描述等字段。使用 Vue 的 v-model 指令实现双向数据绑定。 <tem…

vue实现删除卡片

vue实现删除卡片

实现删除卡片功能 在Vue中实现删除卡片功能通常涉及以下几个关键步骤: 数据绑定与列表渲染 使用v-for指令渲染卡片列表,确保每个卡片有唯一标识符(通常为id): <div v-for…