当前位置:首页 > 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>

添加加载状态和空状态

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

vue实现搜索

<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实现sso

vue实现sso

Vue 实现 SSO(单点登录)方案 单点登录(SSO)允许用户通过一次登录访问多个相关系统。以下是基于 Vue 的实现方案: 使用 OAuth2/OpenID Connect 协议 OAuth2…

vue菜单实现

vue菜单实现

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

vue实现active

vue实现active

Vue 实现 active 状态的方法 在 Vue 中实现 active 状态可以通过以下几种方式实现,具体取决于使用场景和需求。 使用 v-bind:class 动态绑定类名 通过 v-bind:…

vue实现popup

vue实现popup

Vue 实现 Popup 弹窗 使用 Vue 原生组件 创建一个基本的 Vue 组件作为弹窗,通过 v-if 或 v-show 控制显示隐藏。 <template> <div&…

vue动画实现

vue动画实现

Vue动画实现方法 Vue提供了多种方式实现动画效果,主要通过内置组件和第三方库完成。 使用<transition>组件 Vue内置的<transition>组件可以为元素添…

vue实现分步

vue实现分步

Vue 实现分步功能 在 Vue 中实现分步功能可以通过多种方式完成,以下是几种常见的方法: 使用动态组件 通过动态组件切换不同的步骤内容,结合 v-if 或 component 标签实现分步逻辑。…