当前位置:首页 > VUE

vue实现城市模糊查询

2026-02-23 18:36:17VUE

Vue 实现城市模糊查询

数据准备

准备城市数据列表,可以存储在组件的 data 中或通过 API 获取。例如:

data() {
  return {
    cities: ['北京', '上海', '广州', '深圳', '杭州', '南京', '成都', '重庆'],
    searchQuery: '',
    filteredCities: []
  }
}

监听输入变化

使用 v-model 绑定输入框的值,并通过 watchcomputed 监听输入变化:

watch: {
  searchQuery(newVal) {
    this.filterCities(newVal)
  }
}

实现模糊查询逻辑

通过字符串匹配或正则表达式实现模糊查询。以下是一个简单的实现:

methods: {
  filterCities(query) {
    if (!query) {
      this.filteredCities = this.cities
      return
    }
    this.filteredCities = this.cities.filter(city => 
      city.toLowerCase().includes(query.toLowerCase())
    )
  }
}

模板部分

在模板中添加输入框和结果列表:

<template>
  <div>
    <input v-model="searchQuery" placeholder="输入城市名称" />
    <ul>
      <li v-for="city in filteredCities" :key="city">
        {{ city }}
      </li>
    </ul>
  </div>
</template>

使用第三方库优化

可以使用 lodashdebounce 函数优化性能,避免频繁触发查询:

import { debounce } from 'lodash'

methods: {
  filterCities: debounce(function(query) {
    // 模糊查询逻辑
  }, 300)
}

高亮匹配部分

如果需要高亮显示匹配的部分,可以使用 v-html 和正则表达式替换:

methods: {
  highlightMatch(city, query) {
    const regex = new RegExp(query, 'gi')
    return city.replace(regex, match => `<span class="highlight">${match}</span>`)
  }
}
<li v-for="city in filteredCities" :key="city" v-html="highlightMatch(city, searchQuery)" />

样式优化

添加一些基础样式提升用户体验:

.highlight {
  background-color: yellow;
  font-weight: bold;
}

完整示例代码

以下是一个完整的 Vue 组件示例:

vue实现城市模糊查询

<template>
  <div>
    <input v-model="searchQuery" placeholder="输入城市名称" />
    <ul>
      <li v-for="city in filteredCities" :key="city" v-html="highlightMatch(city, searchQuery)" />
    </ul>
  </div>
</template>

<script>
import { debounce } from 'lodash'

export default {
  data() {
    return {
      cities: ['北京', '上海', '广州', '深圳', '杭州', '南京', '成都', '重庆'],
      searchQuery: '',
      filteredCities: []
    }
  },
  created() {
    this.filteredCities = this.cities
  },
  watch: {
    searchQuery(newVal) {
      this.filterCities(newVal)
    }
  },
  methods: {
    filterCities: debounce(function(query) {
      if (!query) {
        this.filteredCities = this.cities
        return
      }
      this.filteredCities = this.cities.filter(city => 
        city.toLowerCase().includes(query.toLowerCase())
      )
    }, 300),
    highlightMatch(city, query) {
      if (!query) return city
      const regex = new RegExp(query, 'gi')
      return city.replace(regex, match => `<span class="highlight">${match}</span>`)
    }
  }
}
</script>

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

标签: 模糊城市
分享给朋友:

相关文章

vue实现模糊

vue实现模糊

Vue实现模糊搜索的方法 在Vue中实现模糊搜索功能,可以通过多种方式完成。以下是几种常见的方法: 使用JavaScript的filter和includes方法 <template>…

vue实现模糊查询

vue实现模糊查询

Vue 实现模糊查询的方法 在 Vue 中实现模糊查询可以通过多种方式完成,以下是几种常见的方法: 使用 JavaScript 的 filter 和 includes 方法 通过 Vue 的 com…

vue实现模糊搜索原理

vue实现模糊搜索原理

实现模糊搜索的基本原理 模糊搜索的核心是通过输入的关键词在数据集中匹配相似内容,而非完全一致。Vue作为前端框架,主要通过数据绑定和计算属性实现动态过滤。 基于计算属性的实现方式 准备数据源 定义…

vue实现城市模糊查询

vue实现城市模糊查询

实现思路 使用Vue实现城市模糊查询功能,主要通过输入框监听用户输入,结合数组的过滤方法动态匹配城市名称。核心步骤包括数据准备、输入监听、模糊匹配和结果展示。 数据准备 准备一个城市列表数据,可以存…

vue模糊查询的实现

vue模糊查询的实现

实现模糊查询的基本思路 在Vue中实现模糊查询通常涉及以下核心步骤:监听用户输入、过滤数据列表、动态渲染结果。以下是具体实现方法: 使用计算属性过滤数据 计算属性适合基于响应式数据自动更新的场景。假…

vue实现模糊查找

vue实现模糊查找

实现模糊查找的基本思路 在Vue中实现模糊查找通常需要结合输入框的实时监听和数据过滤功能。核心步骤包括监听用户输入、对数据进行模糊匹配、实时渲染匹配结果。 使用计算属性实现模糊查找 计算属性适合处理…