当前位置:首页 > 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 管理分类数据:

// 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 服务层:

// 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实现postMessage

Vue实现postMessage

Vue 中使用 postMessage 进行跨窗口通信 在 Vue 中使用 postMessage 可以实现跨窗口通信,适用于不同窗口或 iframe 之间的数据传递。以下是实现方法: 发送…

Vue gitbook 实现

Vue gitbook 实现

Vue 与 GitBook 集成实现 将 Vue 集成到 GitBook 中可以通过插件或自定义构建流程实现,以下是具体方法: 使用 gitbook-plugin-vue 插件 安装插件到 GitB…

Vue实现路由监

Vue实现路由监

Vue 实现路由监听的方法 在 Vue 中可以通过多种方式实现路由监听,以下是常见的几种方法: 使用 watch 监听 $route 对象 通过 Vue 的 watch 功能可以监听 $route…

Vue实现数据检验

Vue实现数据检验

Vue 数据校验的实现方法 在Vue中实现数据校验可以通过多种方式完成,以下是常见的几种方法: 使用Vue的内置指令 Vue提供了一些内置指令如v-model和v-bind可以结合HTML5的表单验…

Vue实现聊天软件

Vue实现聊天软件

Vue实现聊天软件的关键步骤 环境准备与项目初始化 使用Vue CLI或Vite创建Vue 3项目,安装必要依赖如vue-router、pinia(状态管理)、socket.io-client(实时通…

Vue实现图片 放大

Vue实现图片 放大

Vue实现图片放大功能 使用v-viewer插件 安装v-viewer插件: npm install v-viewer 在main.js中引入并配置: import Viewer from '…