当前位置:首页 > VUE

vue实现点击筛选

2026-03-08 07:41:47VUE

实现点击筛选功能

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

使用v-for和v-if结合

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

<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,显示当前选中的筛选条件。

<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筛选

vue实现点击筛选

<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实现多选联动的方法 使用v-model绑定数组 在Vue中,可以通过v-model绑定一个数组来实现多选联动。当复选框被选中或取消选中时,数组会自动更新。 <template>…

vue里实现增删改查

vue里实现增删改查

在Vue中实现增删改查 数据初始化 在Vue组件的data中定义初始数据和表单绑定的变量: data() { return { items: [ { id: 1, name:…

vue实现功能

vue实现功能

Vue 功能实现方法 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是实现常见功能的几种方法: 数据绑定与响应式更新 在 Vue 中,数据绑定通过 v-model…

vue实现grid

vue实现grid

Vue 实现 Grid 布局的方法 使用 CSS Grid 布局 Vue 可以结合 CSS Grid 布局实现灵活的网格系统。CSS Grid 是现代浏览器原生支持的布局方案,无需额外依赖库。 &l…

vue原理实现

vue原理实现

Vue 原理实现的核心机制 Vue.js 的核心原理基于响应式系统、虚拟 DOM 和模板编译。以下是其核心实现机制的分解: 响应式系统 Vue 使用 Object.defineProperty(Vu…

vue实现webapp

vue实现webapp

Vue 实现 WebApp 的基本步骤 环境准备 确保已安装 Node.js 和 npm/yarn。通过 Vue CLI 或 Vite 创建项目: npm install -g @vue/cli v…