当前位置:首页 > VUE

vue实现列表分类

2026-03-08 22:00:59VUE

Vue 实现列表分类的方法

使用计算属性分类

通过计算属性对原始数组进行分类处理,返回分组后的对象或数组。适合静态数据或较少变动的场景。

computed: {
  groupedItems() {
    return this.items.reduce((groups, item) => {
      const category = item.category;
      if (!groups[category]) {
        groups[category] = [];
      }
      groups[category].push(item);
      return groups;
    }, {});
  }
}

模板中使用 v-for 嵌套渲染:

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

使用过滤器方法

创建分类方法在模板中直接调用,灵活性更高,适合需要动态分类的场景。

methods: {
  filterByCategory(category) {
    return this.items.filter(item => item.category === category);
  }
}

模板调用示例:

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

使用第三方库

借助 lodash 的 groupBy 实现快速分类:

import _ from 'lodash';
computed: {
  groupedItems() {
    return _.groupBy(this.items, 'category');
  }
}

动态分类组件

创建可复用的分类组件,通过插槽分发内容:

Vue.component('category-list', {
  props: ['items', 'categoryKey'],
  template: `
    <div>
      <div v-for="(group, category) in groupedItems" :key="category">
        <slot name="header" :category="category"></slot>
        <slot name="body" :group="group"></slot>
      </div>
    </div>
  `,
  computed: {
    groupedItems() {
      return _.groupBy(this.items, this.categoryKey);
    }
  }
});

使用示例:

<category-list :items="products" category-key="type">
  <template v-slot:header="{ category }">
    <h2 class="category-title">{{ category }}</h2>
  </template>
  <template v-slot:body="{ group }">
    <product-card v-for="item in group" :key="item.id" :data="item"/>
  </template>
</category-list>

响应式分类

结合 Vuex 实现全局状态管理的分类:

const store = new Vuex.Store({
  state: {
    items: []
  },
  getters: {
    groupedItems: state => {
      return state.items.reduce((result, item) => {
        (result[item.category] || (result[item.category] = [])).push(item);
        return result;
      }, {});
    }
  }
});

组件中通过 mapGetters 访问:

vue实现列表分类

import { mapGetters } from 'vuex';
computed: {
  ...mapGetters(['groupedItems'])
}

标签: 列表vue
分享给朋友:

相关文章

vue实现访问量

vue实现访问量

Vue 实现访问量统计的方法 使用前端计数 在 Vue 中可以通过简单的计数器实现页面访问量的统计。这种方法适合小型项目或演示用途。 // 在 Vue 组件中 data() { return {…

vue 实现tabs

vue 实现tabs

Vue 实现 Tabs 组件的方法 使用动态组件和 v-for 在 Vue 中实现 Tabs 可以通过动态组件和 v-for 指令结合完成。定义一个 tabs 数组,包含每个标签的标题和对应的组件。…

vue实现删除

vue实现删除

Vue 实现删除功能的方法 在 Vue 中实现删除功能通常涉及以下几个步骤: 数据绑定与列表渲染 使用 v-for 指令渲染列表数据,并为每个项绑定唯一标识符(如 id)。例如: <…

vue实现看板

vue实现看板

Vue 实现看板功能 使用 Vue 实现看板功能可以通过组件化开发、状态管理和拖拽库结合完成。以下是一个完整的实现方案: 基础项目结构 src/ ├── components/ │ ├── Ka…

vue 实现滑动

vue 实现滑动

Vue 实现滑动效果的方法 在Vue中实现滑动效果可以通过多种方式,以下是几种常见的方法: 使用CSS过渡和动画 通过Vue的<transition>组件结合CSS过渡或动画实现滑动效果…

vue模版实现

vue模版实现

Vue 模板实现方法 Vue 模板是 Vue.js 的核心特性之一,用于声明式地将 DOM 绑定至底层 Vue 实例的数据。以下是几种常见的 Vue 模板实现方式: 单文件组件(SFC) 使用 .v…