当前位置:首页 > 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 数组作为数据源。

vue实现搜索页面

<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)减少频繁搜索带来的性能损耗。

vue实现搜索页面

<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 3 实现的简单登录功能示例,包含表单验证和基础交互逻辑: 创建 Vue 组件 <template> <div class="login-contai…

vue自己实现下拉导航

vue自己实现下拉导航

实现下拉导航的基本思路 在Vue中实现下拉导航,可以通过结合Vue的响应式数据和事件绑定特性来完成。主要思路是利用v-show或v-if控制下拉菜单的显示与隐藏,并通过鼠标事件或点击事件触发状态变化。…

vue实现菜单栏锚点

vue实现菜单栏锚点

实现锚点菜单的基本思路 在Vue中实现菜单栏锚点功能,主要涉及两个方面:创建可跳转的锚点位置,以及菜单项的点击滚动控制。通过监听滚动事件可以高亮当前可见区域的对应菜单项。 创建页面锚点位置 在需要跳…

vue element实现

vue element实现

Vue Element UI 实现 Vue Element UI 是基于 Vue.js 的组件库,提供丰富的 UI 组件,适合快速开发企业级中后台产品。以下是一些关键实现方法和步骤: 安装 Vue…

vue实现123456

vue实现123456

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

vue实现滚屏

vue实现滚屏

实现滚屏的基本方法 在Vue中实现滚屏效果可以通过多种方式完成,常见的有原生JavaScript滚动方法、第三方库或CSS动画。以下是几种常见实现方式: 使用window.scrollTo或Elem…