当前位置:首页 > VUE

vue栏目分类实现

2026-01-17 01:36:52VUE

Vue栏目分类实现

数据准备

栏目分类数据通常以树形结构存储,后端返回的数据格式可能如下:

[
  {
    "id": 1,
    "name": "科技",
    "children": [
      {
        "id": 3,
        "name": "人工智能"
      }
    ]
  },
  {
    "id": 2,
    "name": "财经"
  }
]

递归组件实现

创建Category.vue递归组件处理多级分类:

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

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

状态管理

对于复杂场景可使用Vuex管理分类状态:

vue栏目分类实现

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

动态路由整合

结合vue-router实现分类路由:

const routes = [
  {
    path: '/category/:id',
    component: () => import('@/views/CategoryPage.vue'),
    props: true
  }
]

性能优化

对于大型分类树可使用虚拟滚动:

vue栏目分类实现

<template>
  <RecycleScroller
    :items="flattenCategories"
    :item-size="50"
    key-field="id"
  >
    <template v-slot="{ item }">
      <div :style="{ paddingLeft: `${item.level * 20}px` }">
        {{ item.name }}
      </div>
    </template>
  </RecycleScroller>
</template>

交互增强

添加折叠功能改进用户体验:

<script>
export default {
  data() {
    return {
      expandedIds: new Set()
    }
  },
  methods: {
    toggleExpand(id) {
      this.expandedIds.has(id)
        ? this.expandedIds.delete(id)
        : this.expandedIds.add(id)
    }
  }
}
</script>

样式处理

使用CSS变量实现主题化:

.category-item {
  --indent: 20px;
  padding-left: calc(var(--level) * var(--indent));
  transition: all 0.3s ease;
}
.category-item:hover {
  background-color: var(--hover-bg);
}

标签: 栏目vue
分享给朋友:

相关文章

vue前端实现登录

vue前端实现登录

实现登录功能的基本流程 使用Vue实现登录功能需要结合前端框架和后端API交互。以下是一个典型的实现方案: 安装必要依赖 确保项目已安装axios用于HTTP请求: npm install a…

vue怎么实现动画

vue怎么实现动画

Vue 动画实现方法 Vue 提供了多种方式实现动画效果,包括内置过渡系统、第三方库集成以及 CSS 动画。以下是常见实现方法: 使用 Vue 过渡系统 通过 <transition>…

vue实现适老化样式

vue实现适老化样式

Vue 实现适老化样式的关键方法 全局字体与字号调整 通过 CSS 变量或主题配置统一放大基础字号,建议正文不小于 18px,标题更大。在 App.vue 中设置全局样式: :root { -…

vue 移动端实现签名

vue 移动端实现签名

Vue 移动端签名实现方法 在移动端实现签名功能,可以通过HTML5的Canvas结合触摸事件完成。以下是具体实现步骤: 使用Canvas绘制签名 安装vue-signature-pad插件或直…

vue实现按卡片轮播

vue实现按卡片轮播

实现卡片轮播的基本思路 在Vue中实现卡片轮播可以通过结合v-for指令和动态样式绑定完成。核心是维护一个当前显示卡片的索引,通过CSS过渡效果实现平滑切换。 基础实现步骤 模板部分 使用v-for…

vue按钮实现截屏

vue按钮实现截屏

Vue 按钮实现截屏的方法 在 Vue 项目中实现截屏功能可以通过多种方式完成,以下是几种常见的方法: 使用 html2canvas 库 安装 html2canvas 库: npm ins…