当前位置:首页 > 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 实现闯关功能的方法 使用 Vue 实现闯关功能通常需要结合组件化开发、状态管理和动画效果。以下是实现闯关功能的几种方法: 组件化设计 将闯关界面拆分为多个组件,如关卡选择组件、游戏主界面组件…

Vue全局loading实现

Vue全局loading实现

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

Vue实现ui界面

Vue实现ui界面

Vue实现UI界面的方法 使用Vue CLI创建项目 通过Vue CLI快速搭建项目基础结构,确保开发环境配置完整。安装完成后运行vue create project-name选择预设配置或手动配置特…

Vue实现位置切换

Vue实现位置切换

Vue实现元素位置切换的方法 在Vue中实现元素位置切换可以通过多种方式实现,以下列出几种常见方法: 使用v-if/v-else指令 通过条件渲染切换两个元素的位置,适合简单场景: <…

Vue悬浮球怎么实现

Vue悬浮球怎么实现

Vue悬浮球实现方法 使用CSS定位和Vue事件绑定 创建一个Vue组件,利用CSS的position: fixed属性固定悬浮球位置,结合Vue的@click、@touchstart等事件实现交互…

Vue实现首次登录弹窗

Vue实现首次登录弹窗

Vue实现首次登录弹窗的方法 使用本地存储(localStorage)记录登录状态 在用户首次登录时,通过检查localStorage中是否存在特定标记来判断是否需要显示弹窗。如果标记不存在,则显示…