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

模板调用示例:

vue实现列表分类

<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实现列表分类

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 访问:

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

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

相关文章

vue 实现blog

vue 实现blog

Vue 实现博客的基本步骤 使用 Vue 实现博客可以分为前端和后端两部分,前端使用 Vue.js 框架,后端可以选择 Node.js、Python 或其他服务端语言。以下是一个基于 Vue 的博客实…

vue实现drag

vue实现drag

Vue 实现拖拽功能的方法 在 Vue 中实现拖拽功能可以通过原生 HTML5 的拖拽 API 或第三方库如 vuedraggable 来完成。以下是两种常见方法的实现方式。 使用 HTML5 拖拽…

vue实现答题

vue实现答题

Vue 实现答题功能 数据结构设计 使用 Vue 的响应式特性管理题目和答案数据。通常需要以下数据结构: data() { return { questions: [ {…

vue实现队列

vue实现队列

Vue 实现队列功能 在 Vue 中实现队列功能可以通过多种方式完成,以下是几种常见的方法: 使用数组模拟队列 队列遵循先进先出(FIFO)原则,可以用数组的 push 和 shift 方法模拟入队…

vue实现展开

vue实现展开

展开功能的实现方法 在Vue中实现展开功能可以通过多种方式完成,常见的有使用v-show、v-if指令,结合CSS过渡动画或第三方组件库。 使用v-show控制显示隐藏 通过v-show指令可以简单…

vue实现上划

vue实现上划

Vue 实现上划功能 在Vue中实现上划功能,可以通过监听触摸事件(touchstart、touchmove、touchend)来判断用户的手势方向。以下是实现上划功能的几种方法: 监听触摸事件 通…