当前位置:首页 > 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 的表单验证库(如 VeeValidate)或自定义验证规则,确保用户输入的账号和密码符合要求。例如,检查邮箱格式、密码长度等。 发送登录…

vue实现https

vue实现https

Vue 中实现 HTTPS 的步骤 在 Vue 项目中实现 HTTPS 主要涉及开发环境配置和生产环境部署。以下是具体方法: 开发环境配置(Vue CLI 或 Vite) 使用 mkcert 生成…

vue实现全景

vue实现全景

Vue 实现全景效果的方法 使用 Vue 实现全景效果通常需要结合第三方库或框架,以下是几种常见的方法: 使用 Three.js 和 Vue-Three.js Three.js 是一个强大的 3D…

vue实现getapp

vue实现getapp

Vue 中实现全局获取应用实例的方法 在 Vue 3 中,可以通过 getCurrentInstance 方法获取当前组件实例,但需要明确其使用场景和限制。以下是具体实现方式: 方法一:通过 get…

vue实现链接

vue实现链接

Vue 实现链接的方法 在 Vue 中实现链接可以通过多种方式,包括使用 <router-link>、<a> 标签或编程式导航。以下是几种常见的方法: 使用 <rout…

vue拼图实现

vue拼图实现

实现 Vue 拼图游戏的方法 使用 Vue 组件和动态数据绑定 创建一个 Vue 组件来管理拼图的状态和逻辑。通过 v-for 动态渲染拼图块,利用 v-bind 绑定样式和位置。拼图块的数据可以存储…