当前位置:首页 > VUE

vue实现搜索页面

2026-02-17 09:38:00VUE

Vue 实现搜索页面

数据绑定与输入处理

在 Vue 中,使用 v-model 实现输入框与数据的双向绑定。创建一个 searchQuery 变量来存储用户输入的内容。

<template>
  <div>
    <input 
      type="text" 
      v-model="searchQuery" 
      placeholder="输入搜索内容"
      @keyup.enter="handleSearch"
    />
    <button @click="handleSearch">搜索</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: ''
    }
  },
  methods: {
    handleSearch() {
      this.$emit('search', this.searchQuery)
    }
  }
}
</script>

搜索结果展示

根据搜索条件过滤数据,使用 computed 属性动态计算搜索结果。假设有一个 items 数组作为数据源。

<template>
  <div>
    <ul>
      <li v-for="item in filteredItems" :key="item.id">
        {{ item.name }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  props: ['items', 'searchQuery'],
  computed: {
    filteredItems() {
      return this.items.filter(item => 
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  }
}
</script>

集成搜索功能

将输入组件和结果展示组件组合,通过事件传递搜索关键词。

<template>
  <div>
    <SearchInput @search="updateSearchQuery" />
    <SearchResults :items="items" :searchQuery="currentQuery" />
  </div>
</template>

<script>
import SearchInput from './SearchInput.vue'
import SearchResults from './SearchResults.vue'

export default {
  components: { SearchInput, SearchResults },
  data() {
    return {
      items: [
        { id: 1, name: 'Apple' },
        { id: 2, name: 'Banana' },
        { id: 3, name: 'Orange' }
      ],
      currentQuery: ''
    }
  },
  methods: {
    updateSearchQuery(query) {
      this.currentQuery = query
    }
  }
}
</script>

优化搜索性能

对于大数据量场景,使用防抖(debounce)减少频繁搜索带来的性能损耗。

<script>
import _ from 'lodash'

export default {
  methods: {
    handleSearch: _.debounce(function() {
      this.$emit('search', this.searchQuery)
    }, 500)
  }
}
</script>

高亮匹配内容

在搜索结果中高亮显示匹配的关键词,使用自定义过滤器或方法。

<template>
  <div v-html="highlight(item.name, searchQuery)"></div>
</template>

<script>
export default {
  methods: {
    highlight(text, query) {
      if (!query) return text
      const regex = new RegExp(query, 'gi')
      return text.replace(regex, match => `<span class="highlight">${match}</span>`)
    }
  }
}
</script>

<style>
.highlight {
  background-color: yellow;
}
</style>

路由集成

结合 Vue Router 实现 URL 同步,便于分享或刷新页面后保留搜索状态。

// 在路由配置中添加查询参数
{
  path: '/search',
  name: 'Search',
  component: SearchPage,
  props: route => ({ query: route.query.q || '' })
}
// 在搜索方法中更新路由
this.$router.push({ 
  path: '/search', 
  query: { q: this.searchQuery } 
})

vue实现搜索页面

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

相关文章

vue 实现弹幕

vue 实现弹幕

vue 实现弹幕的方法 使用 CSS 动画和动态渲染 在 Vue 中实现弹幕效果,可以通过动态渲染弹幕元素并结合 CSS 动画实现。以下是具体步骤: 数据准备 创建一个数组存储弹幕数据,每条弹幕包…

vue实现setinterval

vue实现setinterval

在 Vue 中使用 setInterval Vue 中可以通过生命周期钩子和方法结合 setInterval 实现定时任务。以下是一个完整的实现示例: <template> <…

vue 实现href

vue 实现href

Vue 实现 href 的方法 在 Vue 中实现 href 功能可以通过多种方式,具体取决于需求场景。以下是几种常见的方法: 使用 <a> 标签 直接使用 HTML 的 <a&g…

vue 实现全屏

vue 实现全屏

Vue 实现全屏功能 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 完成。以下是一个完整的实现方案: 安装依赖(可选) 如果需要跨浏览器兼容性更好,可以安装 sc…

vue 实现折叠

vue 实现折叠

Vue 实现折叠功能的方法 在 Vue 中实现折叠功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 v-if 或 v-show 控制显示隐藏 通过绑定一个布尔值变量,结合 v-if 或…

vue实现Pop

vue实现Pop

Vue 实现 Popover 组件的方法 使用 Vue 内置指令 v-show/v-if 和事件监听 通过 Vue 的指令和事件绑定实现基础的 Popover 功能。定义一个布尔值控制 Popover…