当前位置:首页 > VUE

vue如何实现分类渲染

2026-02-22 00:40:29VUE

Vue 实现分类渲染的方法

使用 v-ifv-for 结合

通过 v-ifv-for 的组合可以实现分类渲染。注意 Vue 2.x 中 v-ifv-for 不能直接用于同一元素,需要嵌套使用。

<template>
  <div>
    <div v-for="category in categories" :key="category.id">
      <h3>{{ category.name }}</h3>
      <ul>
        <li v-for="item in items" :key="item.id" v-if="item.categoryId === category.id">
          {{ item.name }}
        </li>
      </ul>
    </div>
  </div>
</template>

使用计算属性分类数据

通过计算属性将数据按分类预先分组,渲染时直接遍历分组数据。

<template>
  <div>
    <div v-for="category in categorizedItems" :key="category.id">
      <h3>{{ category.name }}</h3>
      <ul>
        <li v-for="item in category.items" :key="item.id">
          {{ item.name }}
        </li>
      </ul>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      categories: [
        { id: 1, name: '分类1' },
        { id: 2, name: '分类2' }
      ],
      items: [
        { id: 1, name: '项目1', categoryId: 1 },
        { id: 2, name: '项目2', categoryId: 2 }
      ]
    }
  },
  computed: {
    categorizedItems() {
      return this.categories.map(category => ({
        ...category,
        items: this.items.filter(item => item.categoryId === category.id)
      }))
    }
  }
}
</script>

使用嵌套组件

将分类和项目分别封装为独立组件,提高复用性和可维护性。

<template>
  <div>
    <category-item 
      v-for="category in categories" 
      :key="category.id" 
      :category="category"
      :items="items"
    />
  </div>
</template>

<script>
import CategoryItem from './CategoryItem.vue'

export default {
  components: { CategoryItem },
  data() {
    return {
      categories: [
        { id: 1, name: '分类1' },
        { id: 2, name: '分类2' }
      ],
      items: [
        { id: 1, name: '项目1', categoryId: 1 },
        { id: 2, name: '项目2', categoryId: 2 }
      ]
    }
  }
}
</script>

使用 Vue 3 的 <script setup>

Vue 3 的 Composition API 提供了更灵活的数据处理方式。

<template>
  <div>
    <div v-for="category in categories" :key="category.id">
      <h3>{{ category.name }}</h3>
      <ul>
        <li v-for="item in getItemsByCategory(category.id)" :key="item.id">
          {{ item.name }}
        </li>
      </ul>
    </div>
  </div>
</template>

<script setup>
import { ref, computed } from 'vue'

const categories = ref([
  { id: 1, name: '分类1' },
  { id: 2, name: '分类2' }
])

const items = ref([
  { id: 1, name: '项目1', categoryId: 1 },
  { id: 2, name: '项目2', categoryId: 2 }
])

const getItemsByCategory = (categoryId) => {
  return items.value.filter(item => item.categoryId === categoryId)
}
</script>

使用第三方库

对于复杂分类需求,可以考虑使用 lodash.groupBy 等工具库简化数据处理。

vue如何实现分类渲染

<template>
  <div>
    <div v-for="(items, categoryName) in groupedItems" :key="categoryName">
      <h3>{{ categoryName }}</h3>
      <ul>
        <li v-for="item in items" :key="item.id">
          {{ item.name }}
        </li>
      </ul>
    </div>
  </div>
</template>

<script>
import { groupBy } from 'lodash'

export default {
  data() {
    return {
      items: [
        { id: 1, name: '项目1', category: '分类1' },
        { id: 2, name: '项目2', category: '分类2' }
      ]
    }
  },
  computed: {
    groupedItems() {
      return groupBy(this.items, 'category')
    }
  }
}
</script>

标签: 如何实现vue
分享给朋友:

相关文章

vue实现签章

vue实现签章

Vue 实现签章功能 签章功能通常包括手写签名、电子印章等。以下是基于 Vue 的实现方法: 使用 canvas 实现手写签名 安装依赖(如需要): npm install signature_p…

vue 全景实现

vue 全景实现

Vue 全景实现方案 在Vue中实现全景效果,通常需要结合WebGL或第三方库来处理3D场景渲染。以下是几种常见方法: 使用Three.js库 Three.js是一个强大的WebGL库,适合创建3D…

vue实现treeselect

vue实现treeselect

Vue TreeSelect 实现方法 使用 Vue 实现 TreeSelect 组件可以通过以下几种方式完成,包括使用现成的第三方库或自行封装组件。 使用第三方库 推荐使用成熟的第三方 TreeS…

vue实现画廊

vue实现画廊

Vue实现画廊的基本方法 使用Vue.js实现画廊功能可以通过多种方式完成,以下是一种常见的实现方案: 安装必要依赖 npm install vue-gallery --save 引入组件并注册…

vue博客实现

vue博客实现

Vue 博客实现步骤 项目初始化与基础配置 使用 Vue CLI 或 Vite 创建项目,安装基础依赖如 vue-router 和状态管理库(如 pinia)。配置路由文件实现页面跳转逻辑,例如博客首…

vue实现rgb调色

vue实现rgb调色

Vue实现RGB调色功能 实现思路 通过Vue的数据绑定和事件处理,动态调整RGB三个通道的值,实时更新显示颜色。 核心代码示例 <template> <div class=…