当前位置:首页 > VUE

用Vue实现商品分类

2026-01-22 03:50:21VUE

使用 Vue 实现商品分类

数据结构设计

商品分类通常采用树形结构,每个分类节点包含 idnamechildren 等字段。例如:

const categories = [
  {
    id: 1,
    name: "电子产品",
    children: [
      {
        id: 101,
        name: "手机",
        children: [
          { id: 1011, name: "智能手机" },
          { id: 1012, name: "功能手机" }
        ]
      }
    ]
  }
]

组件化实现

创建一个递归组件 CategoryTree.vue 来渲染分类树:

<template>
  <ul>
    <li v-for="category in categories" :key="category.id">
      {{ category.name }}
      <CategoryTree 
        v-if="category.children && category.children.length" 
        :categories="category.children"
      />
    </li>
  </ul>
</template>

<script>
export default {
  name: 'CategoryTree',
  props: {
    categories: {
      type: Array,
      required: true
    }
  }
}
</script>

状态管理

对于大型应用,建议使用 Vuex 管理分类数据:

用Vue实现商品分类

// store/modules/categories.js
export default {
  state: {
    categories: []
  },
  mutations: {
    SET_CATEGORIES(state, categories) {
      state.categories = categories
    }
  },
  actions: {
    async fetchCategories({ commit }) {
      const res = await api.getCategories()
      commit('SET_CATEGORIES', res.data)
    }
  }
}

交互功能实现

添加展开/折叠功能:

<template>
  <ul>
    <li v-for="category in categories" :key="category.id">
      <span @click="toggleExpand(category)">
        {{ category.name }}
      </span>
      <CategoryTree 
        v-if="category.children && category.children.length && category.expanded" 
        :categories="category.children"
      />
    </li>
  </ul>
</template>

<script>
export default {
  methods: {
    toggleExpand(category) {
      this.$set(category, 'expanded', !category.expanded)
    }
  }
}
</script>

API 集成

创建 API 服务层:

用Vue实现商品分类

// api/categories.js
import axios from 'axios'

export default {
  getCategories() {
    return axios.get('/api/categories')
  },
  addCategory(parentId, name) {
    return axios.post('/api/categories', { parentId, name })
  }
}

样式优化

使用 CSS 增强视觉效果:

ul {
  list-style: none;
  padding-left: 20px;
}

li {
  cursor: pointer;
  padding: 5px 0;
}

li > span:hover {
  color: #42b983;
  font-weight: bold;
}

完整示例

主组件调用示例:

<template>
  <div>
    <CategoryTree :categories="categories" />
    <button @click="refresh">刷新分类</button>
  </div>
</template>

<script>
import CategoryTree from './CategoryTree.vue'
import api from '../api/categories'

export default {
  components: { CategoryTree },
  data() {
    return {
      categories: []
    }
  },
  created() {
    this.refresh()
  },
  methods: {
    async refresh() {
      const res = await api.getCategories()
      this.categories = res.data
    }
  }
}
</script>

该实现包含了商品分类的核心功能,可根据实际需求扩展编辑、删除等操作。对于性能优化,可考虑虚拟滚动技术处理大型分类树。

标签: 商品分类Vue
分享给朋友:

相关文章

Vue实现几行滚动

Vue实现几行滚动

Vue实现多行滚动效果 实现多行滚动效果可以通过CSS结合Vue的动态绑定完成。以下是几种常见实现方式: CSS动画实现 <template> <div class="scr…

Vue实现移入移出

Vue实现移入移出

Vue 实现移入移出事件 在 Vue 中,可以通过 @mouseenter 和 @mouseleave 指令来实现元素的移入和移出事件。以下是具体实现方法: 基本事件绑定 在模板中直接绑定 @mou…

Vue实现歌曲列表

Vue实现歌曲列表

Vue实现歌曲列表的方法 使用Vue实现歌曲列表可以通过组件化开发、数据绑定和事件处理来完成。以下是具体实现步骤: 数据准备 定义一个包含歌曲信息的数组,每个元素包含歌曲名称、歌手、时长等属性。数据…

Vue全局loading实现

Vue全局loading实现

Vue全局Loading的实现方法 使用Vue插件封装全局Loading组件 创建一个独立的Loading组件,通过Vue插件机制注册为全局组件或方法。 <template> <…

Vue实现时钟

Vue实现时钟

Vue实现时钟的方法 使用Vue实现时钟可以通过多种方式完成,以下是几种常见的实现方法: 使用Date对象和setInterval 通过JavaScript的Date对象获取当前时间,并使用setI…

vue实现商品分类

vue实现商品分类

Vue 实现商品分类的方法 数据准备 商品分类数据通常以树形结构组织,包含父分类和子分类。数据格式可以设计为: categories: [ { id: 1, name: "电子产…