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

vue实现modal

Vue 实现 Modal 弹窗组件 使用 Vue 实现 Modal 弹窗组件可以通过多种方式,包括原生 Vue 组件、第三方库或自定义指令。以下是几种常见方法: 原生 Vue 组件实现 创建一个基…

vue实现123456

vue实现123456

Vue 实现数字 123456 的显示 在 Vue 中显示数字 123456 非常简单,可以通过以下方法实现: 方法一:直接在模板中显示 <template> <div&…

vue实现双向

vue实现双向

Vue 实现双向绑定的方法 Vue 的双向绑定主要通过 v-model 指令实现,它结合了数据绑定和事件监听,适用于表单元素(如 input、select、textarea 等)。以下是几种常见的实现…

vue实现api

vue实现api

Vue 实现 API 调用 在 Vue 中调用 API 通常涉及使用 axios 或 fetch 发送 HTTP 请求,并结合 Vue 的响应式特性管理数据。以下是常见的实现方式: 安装 axios…

vue实现keepalive

vue实现keepalive

Vue 中实现 keep-alive 在 Vue 中,keep-alive 是一个内置组件,用于缓存动态组件或组件的状态,避免重复渲染和销毁。以下是实现 keep-alive 的几种方法: 基本用法…

vue实现销售程序

vue实现销售程序

Vue实现销售程序的基本步骤 搭建Vue项目基础结构 使用Vue CLI或Vite初始化项目,安装必要依赖(如Vue Router、Vuex/Pinia、Element UI/Ant Design V…