如何在uniapp中实现城市搜索功能

1. 前言

城市搜索功能是现在非常常见的一种功能,在很多应用中都有涉及。在uniapp中,实现城市搜索功能也是非常容易的,本文将会详细介绍如何在uniapp中实现城市搜索功能。

2. 数据源

实现城市搜索功能需要一个城市数据源,常用的数据源有两种:

通过第三方API获取城市数据

自己维护城市数据 JSON 文件

在此,我们使用自己维护城市数据 JSON 文件的方式来实现城市搜索功能。你可以在Github上找到一个非常全面的城市列表,下载地址是 https://github.com/modood/Administrative-divisions-of-China ,选择json文件即可。

3. 实现

3.1 加载城市数据

我们在 main.js 中加载城市数据:

import cityData from '@/common/cityData.js'

Vue.prototype.$cityData = cityData

其中 $cityData 是挂载到全局的属性名,cityData.js 是我们维护的城市列表 JSON 文件。

为了方便搜索,我们需要对城市列表数据进行处理,将每个城市的拼音全拼和简拼提取出来,代码如下:

let pinyinUtil = require('@/common/pinyinUtil.js')

let cityList = Object.assign({}, this.$cityData) // 深拷贝一次,防止修改 $cityData 中的数据

Object.keys(cityList).forEach(key => {

cityList[key].forEach(city => {

// 将城市名称转换为拼音全拼和简拼

let pinyin = pinyinUtil.getPinyin(city.name).toLowerCase()

let py = ''

pinyin.split(' ').forEach(i => {

py += i[0]

})

city.pinyin = pinyin

city.py = py

})

})

Vue.prototype.$cityList = cityList // 将处理好的城市列表数据挂载到全局

这里我们使用了一个第三方库 pinyinUtil.js 来实现汉字转拼音,安装命令为:

npm install pinyin --save

3.2 实现搜索功能

搜索功能的实现需要用到 Input 组件和 v-model 指令。

首先我们在页面上添加一个 Input 组件:

然后在 data 中定义 keyword 数据:

data() {

return {

keyword: ''

}

},

使用 v-model 指令实现双向绑定,每次 keyword 的值发生变化时,都会触发搜索方法:

watch: {

keyword() {

this.search()

}

},

methods: {

search() {

// 根据关键字搜索城市

let list = []

let keyword = this.keyword.trim().toLowerCase()

let cityList = this.$cityList

if (keyword) {

Object.keys(cityList).forEach(key => {

cityList[key].forEach(city => {

if (city.name.indexOf(keyword) !== -1 || city.pinyin.indexOf(keyword) !== -1 || city.py.indexOf(keyword) !== -1) {

let item = Object.assign({}, city)

item.parent = key

list.push(item)

}

})

})

}

this.list = list

}

}

search 方法中,首先获取所有城市列表数据,然后遍历每个城市,如果城市名称、拼音全拼或简拼中包含了关键字,就将该城市加入搜索结果列表中。

这里有个细节,我们还需要把每个城市所属的省份或直辖市的名称保存下来,方便后面的展示。我们通过 parent 字段来保存。

3.3 展示搜索结果

最后,我们需要在页面上展示搜索结果。我们使用 v-for 指令来遍历搜索结果列表,并使用 v-show 指令根据搜索结果列表的长度来控制是否展示:

{{ item.name }},{{ item.parent }}

这里我们还定义了一个 select 方法,表示选择某个城市后的操作。这个方法根据场景需求进行编写即可。

4. 总结

到这里,我们就完成了在 uniapp 中实现城市搜索功能的全部流程,通过搜索,用户可以方便快速地找到所需城市名称,提高了用户体验。

通过本文的讲解,希望读者能够掌握在 uniapp 中实现城市搜索功能的方法,同时也希望读者在实际项目开发中能够善用这种功能,为用户带来更好的使用体验。