当前位置:首页 > VUE

vue实现搜索页面

2026-03-08 21:57:49VUE

Vue实现搜索页面的方法

基本结构搭建

使用Vue CLI或Vite创建项目,安装必要依赖。搜索页面通常包含输入框、搜索按钮和结果列表组件。

<template>
  <div class="search-page">
    <input v-model="searchQuery" @keyup.enter="handleSearch" placeholder="输入关键词..."/>
    <button @click="handleSearch">搜索</button>
    <ul v-if="results.length">
      <li v-for="(item, index) in results" :key="index">{{ item.title }}</li>
    </ul>
    <p v-else>暂无结果</p>
  </div>
</template>

数据绑定与事件处理

通过v-model实现双向数据绑定,监听键盘事件或点击事件触发搜索。

<script>
export default {
  data() {
    return {
      searchQuery: '',
      results: []
    }
  },
  methods: {
    async handleSearch() {
      if (!this.searchQuery.trim()) return
      try {
        const response = await fetch(`/api/search?q=${encodeURIComponent(this.searchQuery)}`)
        this.results = await response.json()
      } catch (error) {
        console.error('搜索失败:', error)
      }
    }
  }
}
</script>

API请求封装

建议将API请求单独封装,便于维护和复用。创建api.js文件:

export const searchAPI = (query) => {
  return fetch(`/api/search?q=${encodeURIComponent(query)}`)
    .then(response => response.json())
}

结果展示优化

使用计算属性处理搜索结果,添加加载状态和错误提示。

computed: {
  hasResults() {
    return this.results.length > 0
  }
},
data() {
  return {
    isLoading: false,
    error: null
  }
},
methods: {
  async handleSearch() {
    this.isLoading = true
    this.error = null
    try {
      this.results = await searchAPI(this.searchQuery)
    } catch (err) {
      this.error = '搜索失败,请重试'
    } finally {
      this.isLoading = false
    }
  }
}

样式设计

添加基础样式提升用户体验,建议使用CSS预处理器。

<style scoped>
.search-page {
  max-width: 800px;
  margin: 0 auto;
  padding: 20px;
}
input {
  width: 70%;
  padding: 8px;
}
button {
  padding: 8px 16px;
  margin-left: 10px;
}
ul {
  list-style: none;
  padding: 0;
}
li {
  padding: 8px;
  border-bottom: 1px solid #eee;
}
</style>

高级功能扩展

实现防抖优化,避免频繁请求API。

import { debounce } from 'lodash'

export default {
  created() {
    this.debouncedSearch = debounce(this.handleSearch, 500)
  },
  methods: {
    onInputChange() {
      this.debouncedSearch()
    }
  }
}

路由集成

如果使用Vue Router,可以设置搜索页为独立路由。

const routes = [
  {
    path: '/search',
    component: SearchPage,
    props: route => ({ query: route.query.q })
  }
]

状态管理

对于复杂应用,建议使用Vuex或Pinia管理搜索状态。

vue实现搜索页面

// Pinia示例
export const useSearchStore = defineStore('search', {
  state: () => ({
    results: [],
    history: []
  }),
  actions: {
    async search(query) {
      const res = await searchAPI(query)
      this.results = res
      this.history.push(query)
    }
  }
})

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

相关文章

实现vue组件

实现vue组件

Vue 组件的基本实现 Vue 组件是 Vue.js 的核心特性之一,允许将 UI 拆分为独立、可复用的模块。以下是实现 Vue 组件的几种方式: 单文件组件 (SFC) 使用 .vue 文件格式,…

vue实现流程

vue实现流程

Vue 实现流程的基本步骤 安装 Vue.js 可以通过 CDN 引入或使用 npm/yarn 安装。 CDN 方式: <script src="https://cdn.jsdelivr.…

vue实现海报

vue实现海报

Vue 实现海报生成方案 使用 html2canvas 库 html2canvas 是一个将 HTML 元素转换为 Canvas 的库,适合将 Vue 组件渲染为海报图片 安装依赖: npm in…

vue实现浮标

vue实现浮标

Vue 实现浮动按钮(浮标) 使用 Vue 实现浮动按钮可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 定位和 Vue 组件 创建 Vue 组件并配合 CSS 固定定位实现浮动按钮:…

vue实现发帖

vue实现发帖

使用 Vue 实现发帖功能 前端实现 创建发帖表单组件,包含标题和内容输入框,以及提交按钮。使用 v-model 绑定表单数据。 <template> <div>…

vue 实现路径

vue 实现路径

在 Vue 中实现路径管理通常涉及路由配置、动态路由、嵌套路由等场景,以下是具体实现方法: 基础路由配置 安装 Vue Router 并创建路由实例: npm install vue-router…