当前位置:首页 > VUE

vue实现产品列表

2026-02-18 16:09:23VUE

实现产品列表的Vue方案

基础结构搭建

使用Vue CLI或Vite创建项目后,在组件目录下新建ProductList.vue。组件需要包含模板、脚本和样式三部分:

<template>
  <div class="product-list">
    <h2>产品列表</h2>
    <ul>
      <li v-for="product in products" :key="product.id">
        {{ product.name }} - ¥{{ product.price }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      products: [
        { id: 1, name: '产品A', price: 99 },
        { id: 2, name: '产品B', price: 199 }
      ]
    }
  }
}
</script>

动态数据加载

通过axios从API获取数据:

vue实现产品列表

<script>
import axios from 'axios';

export default {
  data() {
    return {
      products: [],
      loading: false
    }
  },
  async created() {
    this.loading = true;
    try {
      const response = await axios.get('/api/products');
      this.products = response.data;
    } catch (error) {
      console.error('获取产品失败:', error);
    } finally {
      this.loading = false;
    }
  }
}
</script>

列表项组件化

创建ProductItem.vue子组件提高复用性:

<template>
  <div class="product-item">
    <img :src="product.image" :alt="product.name">
    <h3>{{ product.name }}</h3>
    <p>价格: {{ product.price }}</p>
    <button @click="$emit('add-to-cart', product)">加入购物车</button>
  </div>
</template>

<script>
export default {
  props: {
    product: {
      type: Object,
      required: true
    }
  }
}
</script>

分页功能实现

添加分页控制逻辑:

vue实现产品列表

<template>
  <div>
    <ProductItem 
      v-for="product in paginatedProducts"
      :product="product"
      @add-to-cart="handleAddToCart"
    />
    <div class="pagination">
      <button 
        v-for="page in totalPages" 
        :key="page"
        @click="currentPage = page"
      >
        {{ page }}
      </button>
    </div>
  </div>
</template>

<script>
import ProductItem from './ProductItem.vue';

export default {
  components: { ProductItem },
  data() {
    return {
      products: [],
      currentPage: 1,
      itemsPerPage: 5
    }
  },
  computed: {
    totalPages() {
      return Math.ceil(this.products.length / this.itemsPerPage);
    },
    paginatedProducts() {
      const start = (this.currentPage - 1) * this.itemsPerPage;
      const end = start + this.itemsPerPage;
      return this.products.slice(start, end);
    }
  }
}
</script>

搜索与筛选

增加产品搜索功能:

<template>
  <div>
    <input 
      v-model="searchQuery" 
      placeholder="搜索产品..."
    >
    <select v-model="selectedCategory">
      <option value="">所有分类</option>
      <option 
        v-for="category in categories" 
        :value="category"
      >
        {{ category }}
      </option>
    </select>
    <ProductItem 
      v-for="product in filteredProducts"
      :product="product"
    />
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      selectedCategory: '',
      categories: ['电子', '家居', '服饰']
    }
  },
  computed: {
    filteredProducts() {
      return this.products.filter(product => {
        const matchesSearch = product.name
          .toLowerCase()
          .includes(this.searchQuery.toLowerCase());
        const matchesCategory = !this.selectedCategory || 
          product.category === this.selectedCategory;
        return matchesSearch && matchesCategory;
      });
    }
  }
}
</script>

性能优化

对于大型列表使用虚拟滚动:

<template>
  <RecycleScroller
    class="scroller"
    :items="products"
    :item-size="100"
    key-field="id"
  >
    <template v-slot="{ item }">
      <ProductItem :product="item" />
    </template>
  </RecycleScroller>
</template>

<script>
import { RecycleScroller } from 'vue-virtual-scroller';
import 'vue-virtual-scroller/dist/vue-virtual-scroller.css';

export default {
  components: { RecycleScroller }
}
</script>

标签: 列表产品
分享给朋友:

相关文章

vue实现WiFi列表

vue实现WiFi列表

获取WiFi列表的Vue实现 使用Vue获取WiFi列表需要结合浏览器API或后端服务,因为浏览器出于安全限制无法直接访问系统WiFi信息。以下是两种常见实现方式: 方法一:通过Web API获取附…

vue实现列表水印

vue实现列表水印

实现列表水印的方法 在Vue中为列表添加水印可以通过多种方式实现,以下是几种常见的方法: 使用CSS背景图 通过CSS的background-image属性为列表元素添加水印背景。水印可以是文字或图…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaS…

vue实现纵向列表

vue实现纵向列表

实现纵向列表的基本方法 在Vue中实现纵向列表可以通过v-for指令结合数组数据渲染。核心是利用循环遍历数据生成列表项,并设置CSS控制纵向排列。 <template> <di…

vue实现卡片列表

vue实现卡片列表

Vue 实现卡片列表 使用 v-for 动态渲染卡片列表 通过 Vue 的 v-for 指令可以动态渲染卡片列表,数据通常存储在组件的 data 或通过 API 获取。 <template&…

vue实现目录列表

vue实现目录列表

实现目录列表的基本思路 在Vue中实现目录列表通常涉及动态渲染嵌套结构的数据,结合递归组件或v-for循环处理层级关系。以下是两种常见实现方式: 方法一:使用递归组件 递归组件适合处理未知深度的嵌套…