当前位置:首页 > VUE

vue实现搜索和替换

2026-02-22 13:19:28VUE

Vue 实现搜索功能

在 Vue 中实现搜索功能通常需要结合 v-model 和计算属性或方法。以下是一个基本实现方式:

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索..." />
    <ul>
      <li v-for="item in filteredItems" :key="item.id">
        {{ item.name }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [
        { id: 1, name: 'Apple' },
        { id: 2, name: 'Banana' },
        { id: 3, name: 'Orange' }
      ]
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => 
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  }
}
</script>

Vue 实现替换功能

替换功能通常需要遍历数据并修改匹配项。以下是实现方式:

<template>
  <div>
    <input v-model="searchTerm" placeholder="搜索内容" />
    <input v-model="replaceTerm" placeholder="替换为" />
    <button @click="replaceAll">全部替换</button>
    <ul>
      <li v-for="(item, index) in items" :key="index">
        {{ item }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchTerm: '',
      replaceTerm: '',
      items: ['Vue', 'React', 'Angular', 'Vuex', 'Vue Router']
    }
  },
  methods: {
    replaceAll() {
      this.items = this.items.map(item => 
        item.replace(new RegExp(this.searchTerm, 'gi'), this.replaceTerm)
      )
    }
  }
}
</script>

高级搜索替换组件

对于更复杂的场景,可以创建一个可复用的搜索替换组件:

<template>
  <div class="search-replace">
    <div class="search-box">
      <input v-model="searchText" placeholder="搜索..." />
      <input v-model="replaceText" placeholder="替换为..." />
      <button @click="performReplace">替换</button>
    </div>
    <div class="content" v-html="highlightedContent"></div>
  </div>
</template>

<script>
export default {
  props: {
    content: String
  },
  data() {
    return {
      searchText: '',
      replaceText: '',
      currentContent: this.content
    }
  },
  computed: {
    highlightedContent() {
      if (!this.searchText) return this.currentContent
      const regex = new RegExp(this.searchText, 'gi')
      return this.currentContent.replace(regex, match => 
        `<span class="highlight">${match}</span>`
      )
    }
  },
  methods: {
    performReplace() {
      if (!this.searchText) return
      const regex = new RegExp(this.searchText, 'gi')
      this.currentContent = this.currentContent.replace(regex, this.replaceText)
    }
  }
}
</script>

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

使用第三方库

对于更强大的搜索替换功能,可以考虑使用专门的库:

import Fuse from 'fuse.js'

// 在Vue组件中
methods: {
  setupFuse() {
    this.fuse = new Fuse(this.items, {
      keys: ['name', 'description'],
      threshold: 0.3
    })
  },
  search() {
    this.filteredItems = this.searchQuery 
      ? this.fuse.search(this.searchQuery).map(r => r.item)
      : this.items
  }
}

实时搜索优化

对于大型数据集,考虑添加防抖功能:

vue实现搜索和替换

import { debounce } from 'lodash'

export default {
  methods: {
    search: debounce(function() {
      // 搜索逻辑
    }, 300)
  }
}

这些方法可以根据具体需求进行调整和组合,实现不同复杂度的搜索替换功能。

标签: vue
分享给朋友:

相关文章

vue实现点击

vue实现点击

实现点击事件的基本方法 在Vue中实现点击事件可以通过v-on指令或@简写方式绑定。以下是常见的点击事件绑定方法: <template> <button v-on:click=…

vue实现tap

vue实现tap

Vue 实现 Tap 事件 在移动端开发中,Tap 事件比 Click 事件更常用,因为 Click 事件有 300ms 延迟。以下是几种在 Vue 中实现 Tap 事件的方法。 使用第三方库 安装…

vue实现心电图

vue实现心电图

Vue 实现心电图效果 在 Vue 中实现心电图效果通常需要结合 Canvas 或 SVG 进行动态绘图,模拟心电图数据的实时变化。以下是两种实现方式的核心思路和代码示例: 使用 Canvas 绘制…

vue实现快手

vue实现快手

Vue 实现类似快手的功能 Vue.js 是一个渐进式 JavaScript 框架,适合构建复杂的单页应用。要实现类似快手的功能,可以结合 Vue 和相关技术栈进行开发。 核心功能模块 视频流展示…

vue实现拦截登录

vue实现拦截登录

Vue 实现登录拦截的方法 使用路由守卫进行拦截 Vue Router 提供了全局前置守卫 beforeEach,可以在路由跳转前进行验证。在路由配置文件中添加以下代码: import router…

vue路由实现介绍

vue路由实现介绍

Vue 路由实现介绍 Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。它通过动态映射组件到路由实现页面无刷新切换,同时支持嵌套路由、路由参数、导航守卫等高级功能…