当前位置:首页 > 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) 使用组件库(如Element UI) Element UI提供了现成的验证码组件,可直接集成到Vue项目中。 安装Element UI: npm install elem…

拖拽式编程vue实现

拖拽式编程vue实现

拖拽式编程在 Vue 中的实现方法 使用 HTML5 原生拖放 API Vue 可以结合 HTML5 的拖放 API 实现基础拖拽功能。通过 draggable 属性标记可拖拽元素,监听 dragst…

vue实现适老化样式

vue实现适老化样式

Vue 实现适老化样式的关键方法 全局字体与字号调整 通过 CSS 变量或主题配置统一放大基础字号,建议正文不小于 18px,标题更大。在 App.vue 中设置全局样式: :root { --…

vue实现防抖节流

vue实现防抖节流

Vue 中实现防抖(Debounce) 防抖的核心是延迟执行函数,在连续触发时取消前一次的调用,只执行最后一次。适用于输入框搜索、窗口大小调整等场景。 方法1:使用 Lodash 的 _.debou…

vue实现下载暂停

vue实现下载暂停

Vue实现下载暂停功能 在Vue中实现下载暂停功能,通常需要结合XMLHttpRequest或Fetch API的AbortController来控制请求中断。以下是具体实现方法: 使用XMLHtt…

vue实现倒计时抢券

vue实现倒计时抢券

Vue 实现倒计时抢券功能 核心逻辑 倒计时抢券功能需要结合时间计算、状态管理和界面交互。通过 Vue 的响应式特性和生命周期钩子,可以高效实现这一需求。 实现步骤 1. 数据准备 在 Vue 组…