当前位置:首页 > 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 中实现选区创建通常涉及 DOM 操作和事件处理。以下是几种常见的方法: 使用原生 DOM API 通过 window.getSelection() 和 Ra…

vue查看更多怎么实现

vue查看更多怎么实现

实现 Vue 的“查看更多”功能 数据截取与显示控制 通过 v-if 或 v-show 控制内容的显示与隐藏。初始状态下只显示部分内容,点击“查看更多”后展开完整内容。 <template&…

vue实现继承语法糖

vue实现继承语法糖

在Vue中实现继承可以通过多种方式模拟类继承的效果,以下是常见的几种方法: 使用mixins实现逻辑复用 通过Vue的mixins机制共享组件选项,达到类似继承的效果: const Bas…

简单实现vue

简单实现vue

Vue 的基本实现 创建一个简单的 Vue 应用需要引入 Vue 库,并编写基本的模板和数据绑定逻辑。 <!DOCTYPE html> <html lang="en"> &…

vue实现节流

vue实现节流

vue实现节流的方法 在Vue中实现节流(throttle)功能,通常用于限制高频事件的触发频率,例如滚动、输入或按钮点击。以下是几种常见的实现方式: 使用Lodash的throttle函数 安装…

vue 组件实现

vue 组件实现

Vue 组件实现方法 单文件组件 (SFC) 使用 .vue 文件格式,包含模板、脚本和样式三部分: <template> <div class="example">{{…