当前位置:首页 > VUE

vue实现自动筛选

2026-01-19 14:26:33VUE

自动筛选实现方法

在Vue中实现自动筛选功能,可以通过计算属性、v-model指令和数组过滤方法结合完成。以下是具体实现方式:

基础实现

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索..." />
    <ul>
      <li v-for="item in filteredItems" :key="item.id">
        {{ item.name }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [
        { id: 1, name: '苹果' },
        { id: 2, name: '香蕉' },
        { id: 3, name: '橙子' }
      ]
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => 
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  }
}
</script>

优化版本(支持多字段筛选)

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索名称或描述..." />
    <ul>
      <li v-for="item in filteredItems" :key="item.id">
        {{ item.name }} - {{ item.description }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [
        { id: 1, name: '苹果', description: '红色水果' },
        { id: 2, name: '香蕉', description: '黄色水果' },
        { id: 3, name: '橙子', description: '橙色水果' }
      ]
    }
  },
  computed: {
    filteredItems() {
      const query = this.searchQuery.toLowerCase()
      return this.items.filter(item => 
        item.name.toLowerCase().includes(query) || 
        item.description.toLowerCase().includes(query)
      )
    }
  }
}
</script>

高级筛选功能

使用debounce优化性能

<script>
import { debounce } from 'lodash'

export default {
  data() {
    return {
      searchQuery: '',
      items: [...],
      filteredItems: []
    }
  },
  watch: {
    searchQuery: debounce(function(newVal) {
      this.filterItems(newVal)
    }, 300)
  },
  methods: {
    filterItems(query) {
      const q = query.toLowerCase()
      this.filteredItems = this.items.filter(item =>
        item.name.toLowerCase().includes(q)
      )
    }
  }
}
</script>

结合Vuex实现

// store.js
const store = new Vuex.Store({
  state: {
    items: [...],
    searchQuery: ''
  },
  getters: {
    filteredItems: state => {
      return state.items.filter(item =>
        item.name.toLowerCase().includes(state.searchQuery.toLowerCase())
      )
    }
  }
})

// 组件中使用
computed: {
  ...mapGetters(['filteredItems']),
  searchQuery: {
    get() {
      return this.$store.state.searchQuery
    },
    set(value) {
      this.$store.commit('UPDATE_SEARCH_QUERY', value)
    }
  }
}

筛选组件封装

可复用筛选组件

vue实现自动筛选

<template>
  <div class="filter-container">
    <slot name="input" :query="query" :updateQuery="updateQuery">
      <input 
        :value="query" 
        @input="updateQuery($event.target.value)" 
        placeholder="搜索..."
      />
    </slot>
    <slot name="results" :filteredItems="filteredItems">
      <ul>
        <li v-for="item in filteredItems" :key="getKey(item)">
          {{ item }}
        </li>
      </ul>
    </slot>
  </div>
</template>

<script>
export default {
  props: {
    items: {
      type: Array,
      required: true
    },
    filterFn: {
      type: Function,
      default: (item, query) => 
        item.toString().toLowerCase().includes(query.toLowerCase())
    },
    getKey: {
      type: Function,
      default: (item, index) => index
    }
  },
  data() {
    return {
      query: ''
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => 
        this.filterFn(item, this.query)
      )
    }
  },
  methods: {
    updateQuery(query) {
      this.query = query
    }
  }
}
</script>

这些方法涵盖了从基础到高级的自动筛选实现,可以根据项目需求选择合适的方案。组件化封装使得筛选功能可以在不同场景下复用,而Vuex集成则适合大型应用的状态管理需求。

标签: vue
分享给朋友:

相关文章

vue实现分发

vue实现分发

Vue 实现分发的方法 在 Vue 中,分发(Distribution)通常指的是将内容从父组件传递到子组件,或者通过插槽(Slots)机制让父组件控制子组件的部分渲染内容。以下是几种常见的实现分发的…

vue实现Siri

vue实现Siri

Vue 实现 Siri 风格语音交互 实现类似 Siri 的语音交互功能需要结合语音识别、语音合成和前端交互逻辑。Vue 作为前端框架,可以很好地管理这些功能的交互状态。 语音识别集成 使用 Web…

vue实现github

vue实现github

Vue 实现 GitHub 相关功能 创建 GitHub API 请求 在 Vue 项目中,可以使用 axios 或 fetch 与 GitHub API 进行交互。需要在 GitHub 上创建个人访…

vue 实现hover

vue 实现hover

Vue 实现 Hover 效果的方法 在 Vue 中实现 hover 效果可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 伪类 :hover 最简单的方式是直接使用 CSS 的 :hov…

vue实现肢体识别

vue实现肢体识别

Vue 中实现肢体识别的方法 在 Vue 项目中实现肢体识别通常需要结合第三方库或 API,例如 TensorFlow.js、MediaPipe 或 OpenCV。以下是几种常见的实现方式: 使用…

vue怎样实现mvvm

vue怎样实现mvvm

Vue 实现 MVVM 的原理 Vue 的 MVVM(Model-View-ViewModel)模式通过数据绑定和响应式系统实现视图与数据的自动同步。以下是 Vue 实现 MVVM 的核心机制: 数…