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

样式优化

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

vue实现搜索页面

<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中可以通过集成拼音转换库(如pinyin或pinyin-pro)实现这一功能。 安装拼音转换库…

vue实现无线滚动列表

vue实现无线滚动列表

无限滚动列表的实现方法 在Vue中实现无限滚动列表通常结合监听滚动事件和动态加载数据。以下是几种常见方法: 使用自定义指令 创建自定义指令v-infinite-scroll监听滚动事件: Vue.…

实现vue

实现vue

安装Vue.js 通过npm安装Vue.js是最常见的方式。确保已安装Node.js和npm,运行以下命令: npm install vue 或者使用CDN直接引入: <script src…

vue实现轮询

vue实现轮询

实现轮询的基本方法 在Vue中实现轮询可以通过setInterval或setTimeout配合递归调用完成。轮询通常用于定期向服务器请求数据更新。 使用setInterval的简单示例: data…

vue实现公告

vue实现公告

Vue 实现公告功能的方法 公告功能通常需要实现滚动展示、自动切换或固定显示的效果。以下是几种常见的实现方式: 使用 marquee 标签实现滚动公告 <template> <…

分页实现vue

分页实现vue

分页实现(Vue) 在Vue中实现分页功能通常需要结合前端分页逻辑和后端API支持。以下是两种常见的实现方式: 前端分页实现 适用于数据量较小的情况,直接在客户端完成分页逻辑。 <templ…