当前位置:首页 > VUE

vue数据过滤实现搜索

2026-01-23 05:50:48VUE

实现搜索功能的数据过滤

在Vue中实现搜索功能通常涉及对数据进行过滤和展示。可以通过计算属性或方法来实现数据过滤。

使用计算属性实现搜索

计算属性适合在数据变化时自动更新过滤结果。定义一个计算属性,根据搜索关键词过滤数据。

vue数据过滤实现搜索

<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="搜索...">
    <button @click="filterItems">搜索</button>
    <ul>
      <li v-for="item in filteredItems" :key="item.id">
        {{ item.name }}
      </li>
    </ul>
  </div>
</template>

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

使用watch实现搜索

当需要在搜索关键词变化时自动触发过滤,可以使用watch监听searchQuery的变化。

vue数据过滤实现搜索

<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: '',
      filteredItems: [],
      items: [
        { id: 1, name: '苹果' },
        { id: 2, name: '香蕉' },
        { id: 3, name: '橙子' }
      ]
    }
  },
  watch: {
    searchQuery(newVal) {
      this.filteredItems = this.items.filter(item => 
        item.name.toLowerCase().includes(newVal.toLowerCase())
      )
    }
  },
  created() {
    this.filteredItems = this.items
  }
}
</script>

结合第三方库实现高级搜索

对于更复杂的搜索需求,可以结合第三方库如Lodash的_.debounce实现防抖,减少频繁过滤的性能开销。

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

<script>
import _ from 'lodash'

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

多条件搜索实现

如果需要根据多个条件进行搜索,可以扩展过滤逻辑。

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

<script>
export default {
  data() {
    return {
      searchQuery: '',
      categoryQuery: '',
      items: [
        { id: 1, name: '苹果', category: '水果' },
        { id: 2, name: '香蕉', category: '水果' },
        { id: 3, name: '胡萝卜', category: '蔬菜' }
      ]
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => 
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase()) &&
        item.category.toLowerCase().includes(this.categoryQuery.toLowerCase())
      )
    }
  }
}
</script>

以上方法可以根据具体需求选择适合的实现方式,灵活应对不同的搜索场景。

标签: 数据vue
分享给朋友:

相关文章

vue实现跑车

vue实现跑车

Vue 实现跑车动画效果 使用 Vue 结合 CSS 动画可以实现跑车在屏幕上移动的效果。以下是一个完整的实现方案: 创建 Vue 组件结构 <template> <div c…

vue菜单实现

vue菜单实现

Vue 菜单实现方法 使用 Element UI 的菜单组件 Element UI 提供了现成的菜单组件,适合快速实现导航菜单。安装 Element UI 后,可以直接使用 el-menu 相关组件。…

vue实现建模

vue实现建模

Vue 实现建模的方法 在 Vue 中实现建模通常涉及数据绑定、组件化和状态管理。以下是几种常见的方法: 数据驱动建模 Vue 的核心是数据驱动视图。通过定义数据模型,Vue 会自动更新 DOM。例…

vue实现tree

vue实现tree

Vue 实现 Tree 组件 使用 Vue 实现 Tree 组件可以通过递归组件的方式来实现层级结构展示。以下是一个完整的实现方法: 基础递归组件实现 创建 Tree 组件文件 Tree.vue,使…

vue实现computed

vue实现computed

Vue 中 computed 的实现原理 computed 属性是 Vue 的一个核心特性,它基于响应式依赖进行缓存,仅在依赖发生变化时重新计算。以下是 computed 的实现方式: 基本用法 在…

lua 实现vue

lua 实现vue

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