当前位置:首页 > VUE

vue实现搜索页面

2026-01-16 08:28:30VUE

Vue 实现搜索页面的方法

基础结构搭建

创建搜索组件,包含输入框和搜索按钮,使用v-model绑定搜索关键词:

<template>
  <div class="search-container">
    <input 
      v-model="searchQuery" 
      @keyup.enter="search"
      placeholder="输入关键词..."
    />
    <button @click="search">搜索</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: ''
    }
  },
  methods: {
    search() {
      if (this.searchQuery.trim()) {
        this.$emit('search', this.searchQuery)
      }
    }
  }
}
</script>

搜索结果展示

使用计算属性过滤数据列表:

<template>
  <div>
    <search-bar @search="handleSearch"/>
    <ul v-if="filteredItems.length">
      <li v-for="item in filteredItems" :key="item.id">
        {{ item.name }}
      </li>
    </ul>
    <p v-else>无匹配结果</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [...], // 原始数据
      searchTerm: ''
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => 
        item.name.toLowerCase().includes(this.searchTerm.toLowerCase())
      )
    }
  },
  methods: {
    handleSearch(term) {
      this.searchTerm = term
    }
  }
}
</script>

高级搜索功能

实现防抖优化和异步搜索:

<script>
import debounce from 'lodash/debounce'

export default {
  created() {
    this.debouncedSearch = debounce(this.doSearch, 500)
  },
  methods: {
    handleInput() {
      this.debouncedSearch()
    },
    async doSearch() {
      try {
        const response = await axios.get('/api/search', {
          params: { q: this.searchQuery }
        })
        this.results = response.data
      } catch (error) {
        console.error(error)
      }
    }
  }
}
</script>

路由集成

通过路由参数实现可分享的搜索链接:

// router.js
{
  path: '/search/:query?',
  component: SearchPage
}
<script>
export default {
  watch: {
    '$route.params.query'(newVal) {
      if (newVal) this.search(newVal)
    }
  },
  methods: {
    search(query) {
      this.$router.push({ path: `/search/${query}` })
      // ...执行搜索逻辑
    }
  }
}
</script>

样式优化

添加加载状态和动画效果:

<template>
  <div>
    <transition-group name="fade" tag="ul">
      <li v-for="item in results" :key="item.id">
        {{ item.title }}
      </li>
    </transition-group>
    <div v-if="loading" class="loading-indicator">
      搜索中...
    </div>
  </div>
</template>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.3s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}
</style>

这些方法涵盖了从基础到高级的搜索功能实现,可根据实际需求组合使用。

vue实现搜索页面

标签: 页面vue
分享给朋友:

相关文章

vue双向实现

vue双向实现

Vue 双向数据绑定的实现原理 Vue 的双向数据绑定主要通过 v-model 指令实现,其核心是结合了数据劫持(Object.defineProperty 或 Proxy)和发布-订阅模式。 数…

vue实现aop切面

vue实现aop切面

Vue 实现 AOP 切面编程的方法 在 Vue 中实现 AOP(面向切面编程)可以通过多种方式,以下是几种常见的实现方法: 使用 Vue 混入(Mixins) Vue 的混入机制可以用于实现横切关…

vue点击实现排序

vue点击实现排序

实现点击排序的方法 在Vue中实现点击排序功能,可以通过以下几种方式完成: 使用计算属性结合排序方法 定义一个响应式数据存储排序状态,通过计算属性动态返回排序后的数组。点击事件切换排序状态。…

vue实现裁剪头像

vue实现裁剪头像

Vue 实现头像裁剪功能 实现头像裁剪功能通常需要结合第三方库如 cropperjs 或 vue-cropper。以下是两种常见实现方式: 使用 vue-cropper 库 安装依赖: n…

vue实现录音文件播放

vue实现录音文件播放

使用 Vue 实现录音文件播放 准备工作 确保项目中已安装必要的依赖,如 vue-audio-recorder 或原生 Web Audio API。录音文件播放通常涉及录音、存储和播放三个核心环节。…

vue实现绑卡的原理

vue实现绑卡的原理

Vue 实现绑卡的原理 Vue 实现绑卡功能通常涉及前端表单处理、数据绑定、验证以及和后端 API 的交互。以下是实现绑卡功能的核心原理和步骤: 数据绑定与表单处理 Vue 通过 v-model…