当前位置:首页 > 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中实现导航切换内容,可以通过以下方式实现: 使用动态组件 动态组件通过<component :is="currentComponent">实现内容切…

vue实现triger

vue实现triger

在Vue中实现触发器(trigger)功能通常涉及自定义事件或DOM事件触发。以下是几种常见场景的实现方法: 自定义事件触发 通过$emit方法触发父组件中监听的自定义事件: // 子组件 thi…

vue scrolltop 实现

vue scrolltop 实现

实现 Vue 中的 scrollTop 在 Vue 中实现滚动到顶部功能可以通过多种方式完成,包括使用原生 JavaScript、Vue 指令或第三方库。以下是几种常见的实现方法: 使用原生 Jav…

不用vue实现spa

不用vue实现spa

使用原生 JavaScript 实现 SPA 通过监听 URL 变化动态加载内容,结合 history.pushState 或 hashchange 事件实现路由切换。 // 路由配置 const…

vue实现子表格

vue实现子表格

Vue 实现子表格的方法 在 Vue 中实现子表格可以通过多种方式完成,以下是几种常见的方法: 使用嵌套组件 创建一个父表格组件和一个子表格组件,通过 props 将数据传递给子表格组件。父表格的每…

vue实现右滑

vue实现右滑

Vue 实现右滑功能 右滑功能通常用于移动端应用,实现手势操作。以下是几种常见的实现方法: 使用 Hammer.js 库 Hammer.js 是一个专门处理手势的库,可以方便地实现右滑功能。 im…