当前位置:首页 > 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)
  }
}

实现模糊查询逻辑

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

vue实现城市模糊查询

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 函数优化性能,避免频繁触发查询:

vue实现城市模糊查询

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 组件示例:

<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中实现模糊查找功能,可以通过多种方式实现。以下是几种常见的方法: 使用计算属性实现模糊查找 计算属性可以根据输入的关键词动态过滤数据。定义一个计算属性,根据输入的…

vue实现城市列表排序

vue实现城市列表排序

Vue 实现城市列表排序 数据准备 确保城市数据以数组形式存储,每个城市对象包含名称或其他排序依据的字段。例如: data() { return { cities: [ {…

vue实现城市定位功能

vue实现城市定位功能

使用Geolocation API获取用户位置 在Vue中实现城市定位功能,可以通过浏览器提供的Geolocation API获取用户的经纬度坐标。需要在mounted生命周期钩子中调用相关方法。…

vue实现模糊搜索原理

vue实现模糊搜索原理

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

vue实现模糊搜索功能

vue实现模糊搜索功能

实现模糊搜索的基本思路 在Vue中实现模糊搜索功能通常需要结合输入框的事件监听、数据过滤以及实时展示。核心是利用JavaScript的字符串方法或正则表达式对数据进行匹配筛选。 使用计算属性实现模糊…

vue实现前端模糊查询

vue实现前端模糊查询

实现前端模糊查询的方法 在Vue中实现前端模糊查询可以通过多种方式完成,以下介绍几种常见的方法: 使用JavaScript的filter和includes方法 定义一个搜索方法,利用数组的filte…