当前位置:首页 > VUE

vue实现input模糊查询

2026-02-21 14:34:02VUE

实现模糊查询的基本思路

在Vue中实现input模糊查询,通常需要监听输入框的变化,对输入内容进行模糊匹配,并实时显示匹配结果。核心逻辑包括数据绑定、输入监听和过滤逻辑。

监听输入框变化

使用v-model双向绑定输入框的值,并通过watch或computed监听输入变化。watch适合处理异步操作,computed适合同步过滤。

<template>
  <input v-model="searchText" placeholder="输入查询内容">
  <ul>
    <li v-for="item in filteredList" :key="item.id">{{ item.name }}</li>
  </ul>
</template>

使用computed实现过滤

通过computed属性实时计算匹配结果,利用JavaScript的字符串方法或正则表达式实现模糊匹配。

data() {
  return {
    searchText: '',
    originalList: [
      { id: 1, name: 'Apple' },
      { id: 2, name: 'Banana' },
      { id: 3, name: 'Orange' }
    ]
  }
},
computed: {
  filteredList() {
    return this.originalList.filter(item => 
      item.name.toLowerCase().includes(this.searchText.toLowerCase())
    )
  }
}

使用watch处理异步查询

如果查询需要调用API或处理复杂逻辑,可以使用watch配合防抖函数优化性能。

data() {
  return {
    searchText: '',
    filteredList: [],
    timeout: null
  }
},
watch: {
  searchText(newVal) {
    clearTimeout(this.timeout)
    this.timeout = setTimeout(() => {
      this.filterList(newVal)
    }, 300)
  }
},
methods: {
  filterList(query) {
    this.filteredList = this.originalList.filter(item =>
      item.name.toLowerCase().includes(query.toLowerCase())
    )
  }
}

使用第三方库增强模糊查询

对于更复杂的模糊查询需求,可以使用Fuse.js等专业模糊搜索库,提供更强的匹配能力。

import Fuse from 'fuse.js'

methods: {
  initFuse() {
    const options = {
      keys: ['name'],
      threshold: 0.4
    }
    this.fuse = new Fuse(this.originalList, options)
  },
  filterList(query) {
    this.filteredList = query ? this.fuse.search(query).map(r => r.item) : this.originalList
  }
},
mounted() {
  this.initFuse()
}

样式和交互优化

添加加载状态、空结果提示等交互细节,提升用户体验。

vue实现input模糊查询

<template>
  <div class="search-container">
    <input v-model="searchText" placeholder="输入查询内容">
    <div v-if="loading" class="loading">查询中...</div>
    <ul v-else>
      <li v-for="item in filteredList" :key="item.id">{{ item.name }}</li>
      <li v-if="!filteredList.length">没有找到匹配结果</li>
    </ul>
  </div>
</template>

性能优化建议

对于大数据量列表,考虑分页加载、虚拟滚动等技术。避免频繁触发过滤逻辑,合理使用防抖节流。

标签: 模糊vue
分享给朋友:

相关文章

vue实现发表

vue实现发表

Vue 实现发表功能 在 Vue 中实现发表功能通常涉及表单处理、数据绑定和网络请求。以下是实现步骤和代码示例: 表单设计与数据绑定 创建一个表单用于输入发表内容,使用 v-model 进行数据双向…

vue 指令实现

vue 指令实现

Vue 指令实现 Vue 指令是 Vue.js 提供的特殊属性,用于在 DOM 元素上添加特殊行为。指令以 v- 前缀开头,例如 v-model、v-if、v-for 等。以下是实现自定义指令和常用内…

vue插件实现

vue插件实现

Vue 插件实现方法 Vue 插件是一种向 Vue 应用程序添加全局功能的机制。插件可以包含全局指令、过滤器、混入、实例方法等。 插件的基本结构 一个 Vue 插件通常是一个对象或函数,需要暴露一个…

javascript实现vue

javascript实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,主要包括数据绑定、响应式系统和虚拟 DOM。以下是一个简化的实现示例。 数据响应式系统 通过 Object.de…

vue实现网站

vue实现网站

Vue 实现网站的基本步骤 Vue.js 是一个渐进式 JavaScript 框架,适合构建现代化的单页应用(SPA)或动态网站。以下是使用 Vue 实现网站的基本方法。 初始化 Vue 项目 使用…

vue实现发帖

vue实现发帖

使用 Vue 实现发帖功能 前端实现 创建发帖表单组件,包含标题和内容输入框,以及提交按钮。使用 v-model 绑定表单数据。 <template> <div>…