当前位置:首页 > VUE

vue实现点击筛选

2026-03-08 07:41:47VUE

实现点击筛选功能

在Vue中实现点击筛选功能可以通过多种方式完成,以下是几种常见的方法:

使用v-for和v-if结合

通过绑定点击事件动态改变数据过滤条件,利用计算属性或方法筛选数据。

vue实现点击筛选

<template>
  <div>
    <button @click="filterByCategory('all')">全部</button>
    <button @click="filterByCategory('category1')">分类1</button>
    <button @click="filterByCategory('category2')">分类2</button>

    <div v-for="item in filteredItems" :key="item.id">
      {{ item.name }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, name: '项目1', category: 'category1' },
        { id: 2, name: '项目2', category: 'category2' },
        { id: 3, name: '项目3', category: 'category1' }
      ],
      currentFilter: 'all'
    }
  },
  computed: {
    filteredItems() {
      if (this.currentFilter === 'all') {
        return this.items
      }
      return this.items.filter(item => item.category === this.currentFilter)
    }
  },
  methods: {
    filterByCategory(category) {
      this.currentFilter = category
    }
  }
}
</script>

使用动态class实现高亮

为筛选按钮添加动态class,显示当前选中的筛选条件。

vue实现点击筛选

<template>
  <div>
    <button 
      @click="filterByCategory('all')" 
      :class="{ active: currentFilter === 'all' }"
    >全部</button>
    <button 
      @click="filterByCategory('category1')" 
      :class="{ active: currentFilter === 'category1' }"
    >分类1</button>
    <button 
      @click="filterByCategory('category2')" 
      :class="{ active: currentFilter === 'category2' }"
    >分类2</button>
  </div>
</template>

<style>
.active {
  background-color: #42b983;
  color: white;
}
</style>

使用Vuex管理筛选状态

对于大型应用,可以使用Vuex集中管理筛选状态。

// store.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    items: [
      { id: 1, name: '项目1', category: 'category1' },
      { id: 2, name: '项目2', category: 'category2' },
      { id: 3, name: '项目3', category: 'category1' }
    ],
    currentFilter: 'all'
  },
  mutations: {
    setFilter(state, filter) {
      state.currentFilter = filter
    }
  },
  getters: {
    filteredItems: state => {
      if (state.currentFilter === 'all') {
        return state.items
      }
      return state.items.filter(item => item.category === state.currentFilter)
    }
  }
})

组件中使用Vuex筛选

<template>
  <div>
    <button @click="setFilter('all')">全部</button>
    <button @click="setFilter('category1')">分类1</button>
    <button @click="setFilter('category2')">分类2</button>

    <div v-for="item in filteredItems" :key="item.id">
      {{ item.name }}
    </div>
  </div>
</template>

<script>
import { mapGetters, mapMutations } from 'vuex'

export default {
  computed: {
    ...mapGetters(['filteredItems'])
  },
  methods: {
    ...mapMutations(['setFilter'])
  }
}
</script>

以上方法可以根据项目需求选择适合的实现方式。计算属性和Vuex getters都能高效地处理数据筛选,避免不必要的重复计算。

标签: vue
分享给朋友:

相关文章

vue实现倒计时抢券

vue实现倒计时抢券

Vue 实现倒计时抢券功能 核心逻辑 倒计时抢券功能需要结合时间计算、状态管理和界面交互。通过 Vue 的响应式特性和生命周期钩子,可以高效实现这一需求。 实现步骤 1. 数据准备 在 Vue 组件…

vue课程实现

vue课程实现

Vue 课程实现方案 课程内容设计 Vue课程应从基础到高级逐步展开,涵盖Vue核心概念、组件化开发、状态管理、路由、构建工具等。基础部分包括Vue实例、模板语法、计算属性和侦听器。中级部分深入组件通…

vue实现flbook

vue实现flbook

Vue 实现类似 Flbook 的翻页效果 要实现类似 Flbook 的翻页效果,可以使用 Vue 结合 CSS 动画和 JavaScript 事件处理。以下是实现方法: 安装依赖 需要安装 vue…

lua 实现vue

lua 实现vue

在 Lua 中实现类似 Vue 的响应式框架需要模拟 Vue 的核心功能,包括数据绑定、模板渲染和依赖追踪。以下是实现的关键思路和代码示例: 响应式数据绑定 使用 Lua 的 __index 和 _…

vue 实现上传

vue 实现上传

Vue 实现文件上传 使用 Vue 实现文件上传可以通过原生 HTML 的 <input type="file"> 或第三方库(如 axios、vue-upload-component)完…

vue实现导航

vue实现导航

使用 Vue Router 实现导航 Vue Router 是 Vue.js 官方提供的路由管理器,用于构建单页应用(SPA)的导航系统。以下是实现导航的基本步骤。 安装 Vue Router n…