当前位置:首页 > VUE

vue实现分类列表

2026-01-18 19:20:35VUE

Vue 实现分类列表的方法

数据结构设计

使用数组存储分类数据,每个分类对象包含 idname 等属性,子分类通过 children 字段嵌套。例如:

categories: [
  {
    id: 1,
    name: "电子产品",
    children: [
      { id: 101, name: "手机" },
      { id: 102, name: "笔记本电脑" }
    ]
  }
]

模板渲染

通过 v-for 递归渲染多级分类,结合 v-if 控制子分类的显示状态:

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

动态交互

添加展开/折叠功能,通过 data 中的 expandedIds 数组记录展开状态:

data() {
  return {
    expandedIds: []
  }
},
methods: {
  toggleExpand(id) {
    const index = this.expandedIds.indexOf(id);
    index === -1 
      ? this.expandedIds.push(id) 
      : this.expandedIds.splice(index, 1);
  }
}

样式优化

使用 CSS 增强视觉效果,如缩进表示层级关系:

ul {
  list-style-type: none;
  padding-left: 20px;
}
li {
  cursor: pointer;
  margin: 5px 0;
}

组件化拆分

将分类项拆分为独立组件 CategoryItem,通过 props 接收数据:

// CategoryItem.vue
props: ['category'],
template: `
  <li @click.stop="toggleExpand(category.id)">
    {{ category.name }}
    <ul v-if="isExpanded && category.children">
      <category-item 
        v-for="child in category.children" 
        :key="child.id" 
        :category="child"
      />
    </ul>
  </li>
`

数据加载

通过 API 异步获取分类数据,使用 axiosfetch

async created() {
  try {
    const res = await axios.get('/api/categories');
    this.categories = res.data;
  } catch (error) {
    console.error("加载分类失败", error);
  }
}

状态管理

对于大型应用,建议使用 Vuex 集中管理分类状态:

vue实现分类列表

// store.js
state: {
  categories: []
},
mutations: {
  SET_CATEGORIES(state, data) {
    state.categories = data;
  }
}

标签: 列表vue
分享给朋友:

相关文章

vue实现erp

vue实现erp

Vue实现ERP系统的关键步骤 技术选型与架构设计 采用Vue 3 + TypeScript构建前端,搭配Pinia状态管理,Element Plus或Ant Design Vue作为UI框架。后端可…

vue 实现视频

vue 实现视频

Vue 实现视频播放功能 使用 Vue 实现视频播放功能可以通过 HTML5 的 <video> 标签或第三方库(如 video.js)来实现。以下是两种常见的方法: 使用 HTML5…

vue实现标题

vue实现标题

Vue 实现标题的方法 在Vue中实现标题可以通过多种方式,以下是几种常见的方法: 方法一:使用模板语法 在Vue组件的模板中直接使用HTML的<h1>到<h6>标签来定义…

vue实现开关

vue实现开关

Vue 实现开关组件的方法 使用原生HTML和Vue数据绑定 通过v-model绑定复选框的checked状态,结合CSS样式实现开关效果: <template> <label…

vue nexttick 实现

vue nexttick 实现

Vue nextTick 实现原理 Vue 的 nextTick 是一个用于在下次 DOM 更新循环结束之后执行延迟回调的方法。它主要用于确保在 DOM 更新完成后执行某些操作。 核心实现机制 ne…

vue实现兼容

vue实现兼容

Vue 兼容性实现方案 Vue.js 的兼容性主要涉及对不同浏览器、Vue 版本以及第三方库的支持。以下是常见的兼容性解决方案: 浏览器兼容性 使用 Babel 转换 ES6+ 代码为 ES5 语…