当前位置:首页 > VUE

vue实现筛选效果

2026-01-17 15:04:16VUE

Vue 实现筛选效果的方法

基于计算属性的筛选

在 Vue 中可以通过计算属性实现数据的动态筛选。定义一个计算属性,根据用户输入的筛选条件返回过滤后的数据列表。

<template>
  <div>
    <input v-model="searchText" placeholder="输入筛选条件">
    <ul>
      <li v-for="item in filteredItems" :key="item.id">{{ item.name }}</li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchText: '',
      items: [
        { id: 1, name: 'Apple' },
        { id: 2, name: 'Banana' },
        { id: 3, name: 'Orange' }
      ]
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => 
        item.name.toLowerCase().includes(this.searchText.toLowerCase())
      )
    }
  }
}
</script>

使用 watch 监听筛选条件变化

当筛选逻辑较复杂或需要异步操作时,可以使用 watch 监听筛选条件的变化。

vue实现筛选效果

<script>
export default {
  data() {
    return {
      searchText: '',
      items: [],
      filteredItems: []
    }
  },
  watch: {
    searchText(newVal) {
      this.filterItems(newVal)
    }
  },
  methods: {
    filterItems(searchText) {
      this.filteredItems = this.items.filter(item =>
        item.name.toLowerCase().includes(searchText.toLowerCase())
      )
    }
  },
  created() {
    // 模拟异步获取数据
    setTimeout(() => {
      this.items = [
        { id: 1, name: 'Apple' },
        { id: 2, name: 'Banana' },
        { id: 3, name: 'Orange' }
      ]
      this.filteredItems = [...this.items]
    }, 500)
  }
}
</script>

多条件筛选实现

对于需要多个筛选条件的场景,可以扩展计算属性或方法来实现。

<template>
  <div>
    <input v-model="filters.name" placeholder="名称">
    <input v-model="filters.category" placeholder="类别">
    <ul>
      <li v-for="item in filteredItems" :key="item.id">
        {{ item.name }} - {{ item.category }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      filters: {
        name: '',
        category: ''
      },
      items: [
        { id: 1, name: 'Apple', category: 'Fruit' },
        { id: 2, name: 'Carrot', category: 'Vegetable' },
        { id: 3, name: 'Orange', category: 'Fruit' }
      ]
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => {
        const nameMatch = item.name.toLowerCase().includes(
          this.filters.name.toLowerCase()
        )
        const categoryMatch = item.category.toLowerCase().includes(
          this.filters.category.toLowerCase()
        )
        return nameMatch && categoryMatch
      })
    }
  }
}
</script>

使用第三方库实现高级筛选

vue实现筛选效果

对于更复杂的筛选需求,可以考虑使用 lodash 等工具库的筛选函数。

import _ from 'lodash'

export default {
  computed: {
    filteredItems() {
      return _.filter(this.items, item => {
        return _.includes(item.name.toLowerCase(), this.searchText.toLowerCase())
      })
    }
  }
}

服务器端筛选实现

当数据量很大时,建议将筛选逻辑放在服务器端,通过 API 请求获取筛选结果。

methods: {
  async fetchFilteredData() {
    const response = await axios.get('/api/items', {
      params: {
        search: this.searchText
      }
    })
    this.filteredItems = response.data
  }
},
watch: {
  searchText() {
    this.fetchFilteredData()
  }
}

以上方法可以根据具体需求选择使用,计算属性适合简单客户端筛选,watch 适合需要额外处理的筛选,服务器端筛选适合大数据量场景。

标签: 效果vue
分享给朋友:

相关文章

vue实现验证码

vue实现验证码

Vue 实现验证码的方法 使用第三方库 安装 vue-captcha 或 vue-recaptcha 等第三方库,这些库提供了现成的验证码组件,可以直接集成到 Vue 项目中。以 vue-recapt…

vue实现drag

vue实现drag

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

vue的实现

vue的实现

Vue 的实现原理 Vue 是一个渐进式 JavaScript 框架,其核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是 Vue 实现的主要技术细节。 响应式系统 Vue 的响…

vue diff实现

vue diff实现

Vue Diff 算法实现原理 Vue 的虚拟 DOM Diff 算法(即 patch 过程)是其高效渲染的核心,主要通过对比新旧虚拟节点的差异,最小化 DOM 操作。以下是关键实现要点: 同层级比…

vue实现监听

vue实现监听

监听数据变化 在Vue中,可以通过watch选项或$watch方法监听数据的变化。watch适用于组件选项内声明式监听,$watch适用于动态监听。 // 选项式API export default…

vue实现swiper

vue实现swiper

Vue 中实现 Swiper 的方法 安装 Swiper 依赖 在 Vue 项目中安装 Swiper 和相关依赖: npm install swiper vue-awesome-swiper 全局引…