当前位置:首页 > 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>

使用计算属性分类数据

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

vue如何实现分类渲染

<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>

使用嵌套组件

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

vue如何实现分类渲染

<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 等工具库简化数据处理。

<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 实现录播播放 使用 video.js 实现 安装 video.js 和相关的 Vue 适配器: npm install video.js @videojs-player/vue 在 Vue…

vue穿梭框组件实现

vue穿梭框组件实现

实现基础穿梭框组件 在Vue中实现穿梭框组件,可以使用<el-transfer>(Element UI)或手动实现。以下是手动实现的核心逻辑: <template> &…

vue实现发送值接受值

vue实现发送值接受值

Vue 实现父子组件传值 父组件向子组件传值(props) 父组件通过 v-bind 或简写 : 向子组件传递数据。子组件通过 props 接收数据。 父组件代码: <templat…

vue轮询实现

vue轮询实现

Vue 轮询实现方法 在 Vue 中实现轮询可以通过以下几种方式: 使用 setInterval data() { return { pollInterval: null } }…

vue 实现评分

vue 实现评分

Vue 实现评分功能 在 Vue 中实现评分功能可以通过多种方式完成,包括使用第三方组件库或自定义实现。以下是两种常见的方法: 使用第三方组件库(如 Element UI) Element UI 提…

vue实现加减

vue实现加减

Vue 实现加减功能 在 Vue 中实现加减功能可以通过数据绑定和事件监听来完成。以下是一个简单的实现方法: 模板部分 <template> <div> &…