当前位置:首页 > VUE

vue实现搜索

2026-02-25 15:02:01VUE

vue实现搜索功能

使用v-model绑定输入框

在Vue中可以通过v-model指令实现输入框与数据的双向绑定。创建一个搜索输入框,将用户输入的内容实时绑定到Vue实例的data属性中。

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索..." />
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: ''
    }
  }
}
</script>

计算属性过滤数据

使用计算属性对数据进行过滤。计算属性会根据searchQuery的变化自动重新计算,返回过滤后的结果。

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [
        { name: '苹果' },
        { name: '香蕉' },
        { 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.name">
        {{ item.name }}
      </li>
    </ul>
  </div>
</template>

添加防抖优化性能

对于频繁触发的搜索输入,可以添加防抖函数来优化性能,减少不必要的计算。

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [...],
      debounceTimeout: null
    }
  },
  computed: {
    filteredItems() {
      clearTimeout(this.debounceTimeout)
      return new Promise(resolve => {
        this.debounceTimeout = setTimeout(() => {
          resolve(this.items.filter(item => 
            item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
          ))
        }, 300)
      })
    }
  }
}
</script>

调用API实现远程搜索

对于需要从服务器获取搜索结果的场景,可以在watch中监听searchQuery的变化,调用API获取数据。

<script>
export default {
  data() {
    return {
      searchQuery: '',
      searchResults: []
    }
  },
  watch: {
    searchQuery(newVal) {
      if(newVal.length > 2) {
        this.fetchSearchResults(newVal)
      }
    }
  },
  methods: {
    async fetchSearchResults(query) {
      try {
        const response = await axios.get(`/api/search?q=${query}`)
        this.searchResults = response.data
      } catch (error) {
        console.error('搜索出错:', error)
      }
    }
  }
}
</script>

添加加载状态和空状态

为了提高用户体验,可以添加加载状态和没有搜索结果时的提示。

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索..." />
    <div v-if="isLoading">搜索中...</div>
    <div v-else-if="filteredItems.length === 0">没有找到匹配的结果</div>
    <ul v-else>
      <li v-for="item in filteredItems" :key="item.id">
        {{ item.name }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      isLoading: false,
      items: [...]
    }
  }
}
</script>

vue实现搜索

标签: vue
分享给朋友:

相关文章

vue实现input

vue实现input

Vue 实现 Input 输入框的方法 基本双向绑定 使用 v-model 指令实现双向数据绑定,适用于大多数表单场景: <template> <input v-model="…

vue实现erp

vue实现erp

Vue实现ERP系统的关键步骤 技术选型与架构设计 采用Vue 3 + TypeScript构建前端,搭配Pinia状态管理,Element Plus或Ant Design Vue作为UI框架。后端可…

vue 实现排序

vue 实现排序

Vue 实现排序的方法 使用计算属性实现排序 通过计算属性对数组进行排序,可以保持原始数据不变。示例代码展示了如何对列表按名称升序排序: <template> <div>…

vue实现portal

vue实现portal

Vue 实现 Portal 功能 Portal 是一种将子节点渲染到父组件 DOM 层级之外的 DOM 节点的技术,常用于实现模态框、弹出层等需要脱离当前组件层级的场景。Vue 可以通过多种方式实现…

vue实现系统

vue实现系统

Vue 实现系统的核心方法 使用 Vue.js 构建系统时,需结合其响应式特性与组件化开发模式。以下为关键实现路径: 项目初始化与工程配置 通过 Vue CLI 或 Vite 创建项目骨架,推荐选择…

vue实现拖拉

vue实现拖拉

实现拖拽功能的基本步骤 在Vue中实现拖拽功能可以通过原生HTML5的拖放API或第三方库如vuedraggable完成。以下是两种方法的详细说明。 使用HTML5原生拖放API HTML5提供了原…