当前位置:首页 > VUE

vue实现导航栏搜索

2026-02-23 19:34:23VUE

实现导航栏搜索功能

在Vue中实现导航栏搜索功能可以通过以下步骤完成。假设使用Vue 3和Composition API。

创建搜索组件

新建一个SearchBar.vue组件,包含输入框和搜索按钮:

<template>
  <div class="search-bar">
    <input 
      v-model="searchQuery"
      @keyup.enter="performSearch"
      placeholder="搜索..."
    />
    <button @click="performSearch">搜索</button>
  </div>
</template>

<script setup>
import { ref } from 'vue'
import { useRouter } from 'vue-router'

const searchQuery = ref('')
const router = useRouter()

const performSearch = () => {
  if (searchQuery.value.trim()) {
    router.push({ path: '/search', query: { q: searchQuery.value } })
  }
}
</script>

<style scoped>
.search-bar {
  display: flex;
  gap: 8px;
}
input {
  padding: 8px;
  border: 1px solid #ccc;
  border-radius: 4px;
}
button {
  padding: 8px 16px;
  background-color: #42b983;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}
</style>

在导航栏中集成

将搜索组件添加到导航栏布局中:

vue实现导航栏搜索

<template>
  <nav>
    <!-- 其他导航项 -->
    <SearchBar />
  </nav>
</template>

<script setup>
import SearchBar from './SearchBar.vue'
</script>

处理搜索结果

创建搜索结果页面SearchResults.vue

<template>
  <div>
    <h2>搜索结果: {{ searchTerm }}</h2>
    <!-- 显示搜索结果 -->
    <div v-if="loading">加载中...</div>
    <div v-else>
      <div v-for="result in results" :key="result.id">
        {{ result.title }}
      </div>
    </div>
  </div>
</template>

<script setup>
import { ref, onMounted } from 'vue'
import { useRoute } from 'vue-router'

const route = useRoute()
const searchTerm = ref(route.query.q || '')
const results = ref([])
const loading = ref(false)

const fetchResults = async () => {
  loading.value = true
  try {
    // 替换为实际API调用
    const response = await fetch(`/api/search?q=${searchTerm.value}`)
    results.value = await response.json()
  } catch (error) {
    console.error('搜索出错:', error)
  } finally {
    loading.value = false
  }
}

onMounted(() => {
  if (searchTerm.value) {
    fetchResults()
  }
})
</script>

路由配置

在路由配置中添加搜索路由:

vue实现导航栏搜索

import { createRouter, createWebHistory } from 'vue-router'
import SearchResults from './views/SearchResults.vue'

const router = createRouter({
  history: createWebHistory(),
  routes: [
    // 其他路由
    {
      path: '/search',
      component: SearchResults,
      props: (route) => ({ query: route.query.q })
    }
  ]
})

添加搜索状态管理

对于更复杂的应用,可以使用Pinia管理搜索状态:

// stores/search.js
import { defineStore } from 'pinia'

export const useSearchStore = defineStore('search', {
  state: () => ({
    query: '',
    results: [],
    loading: false
  }),
  actions: {
    async search(query) {
      this.query = query
      this.loading = true
      try {
        // 调用API
        const response = await fetch(`/api/search?q=${query}`)
        this.results = await response.json()
      } catch (error) {
        console.error('搜索出错:', error)
      } finally {
        this.loading = false
      }
    }
  }
})

实现实时搜索

要实现输入时实时搜索,可以添加防抖功能:

<script setup>
import { ref, watch } from 'vue'
import { debounce } from 'lodash'

const searchQuery = ref('')

watch(searchQuery, debounce((newQuery) => {
  if (newQuery.trim()) {
    performSearch(newQuery)
  }
}, 500))
</script>

样式优化

为搜索栏添加更多样式提升用户体验:

.search-bar {
  position: relative;
  width: 300px;
}

.search-bar input {
  width: 100%;
  padding: 10px 15px;
  font-size: 16px;
}

.search-bar button {
  position: absolute;
  right: 5px;
  top: 50%;
  transform: translateY(-50%);
  background: transparent;
  border: none;
  cursor: pointer;
}

以上实现提供了导航栏搜索的基本功能,可以根据实际需求进行调整和扩展。

标签: vue
分享给朋友:

相关文章

vue 实现注册

vue 实现注册

Vue 实现注册功能 注册功能通常包括表单验证、数据提交和用户反馈。以下是实现注册功能的步骤: 1. 创建注册表单组件 在 Vue 项目中创建一个注册表单组件,包含用户名、邮箱、密码等输入字段。…

vue实现多选

vue实现多选

Vue 实现多选功能 在 Vue 中实现多选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定数组 通过 v-model 绑定到一个数组,可以实现多选功能。适用于复选框组(…

vue 实现弹窗

vue 实现弹窗

Vue 实现弹窗的方法 在 Vue 中实现弹窗功能可以通过多种方式完成,以下是几种常见的方法: 使用组件和 v-if/v-show 控制显示 创建一个独立的弹窗组件,通过 v-if 或 v-show…

vue watch实现

vue watch实现

在 Vue 中实现 watch 监听数据变化 Vue 的 watch 选项用于监听数据变化并执行相应的回调函数。以下是几种常见的实现方式: 基础用法 export default { data(…

vue实现幻灯

vue实现幻灯

Vue实现幻灯片的基础方法 使用Vue实现幻灯片功能可以通过多种方式完成,以下是几种常见方案: 方案一:基于Vue的过渡动画 通过Vue的<transition>或<transit…

vue 实现穿透

vue 实现穿透

Vue 样式穿透的实现方法 在 Vue 中,样式穿透通常指在带有 scoped 属性的样式块中,强制影响子组件的样式。以下是几种常见的实现方式: 使用 >>> 或 /deep/ 选…