uni-app是一款基于Vue.js的跨平台开发框架,我们常常在开发中需要实现省市区选择的功能。本文将介绍如何利用uni-app的一些组件和插件来实现省市区选择功能。 首先,我们需要准备一个
uni-app是一款基于Vue.js的跨平台开发框架,我们常常在开发中需要实现省市区选择的功能。本文将介绍如何利用uni-app的一些组件和插件来实现省市区选择功能。
首先,我们需要准备一个省市区的数据源。常用的数据源可以是JSON文件或者从后台API获取。这里我们以JSON文件的方式来演示。
- 创建JSON文件
我们创建一个data.json文件,用来存放省市区数据。内容如下:
{
"provinceList": [
{
"name": "北京市",
"cityList": [
{
"name": "北京市",
"districtList": ["东城区", "西城区", "朝阳区", "丰台区", "石景山区", "海淀区", "门头沟区", "房山区", "通州区", "顺义区", "昌平区", "大兴区", "怀柔区", "平谷区", "密云区", "延庆区"]
}
]
},
{
"name": "上海市",
"cityList": [
{
"name": "上海市",
"districtList": ["黄浦区", "徐汇区", "长宁区", "静安区", "普陀区", "虹口区", "杨浦区", "闵行区", "宝山区", "嘉定区", "浦东新区", "金山区", "松江区", "青浦区", "奉贤区", "崇明区"]
}
]
},
{
"name": "广东省",
"cityList": [
{
"name": "广州市",
"districtList": ["荔湾区", "越秀区", "海珠区", "天河区", "白云区", "黄埔区", "番禺区", "花都区", "南沙区", "增城区", "从化区"]
},
{
"name": "深圳市",
"districtList": ["罗湖区", "福田区", "南山区", "宝安区", "龙岗区", "盐田区", "龙华区", "坪山区", "光明区", "大鹏新区"]
}
]
}
]
}- 页面结构
我们在页面上创建一个省市区选择的表单,代码如下:
<template>
<view>
<form>
<picker mode="selector" range="{{ province }}" bind:change="onProvinceChange">
<view class="picker">
{{ province[index1] }}
<text class="iconfont icon-down"></text>
</view>
</picker>
<picker mode="selector" range="{{ city }}" bind:change="onCityChange">
<view class="picker">
{{ city[index2] }}
<text class="iconfont icon-down"></text>
</view>
</picker>
<picker mode="selector" range="{{ district }}" bind:change="onDistrictChange">
<view class="picker">
{{ district[index3] }}
<text class="iconfont icon-down"></text>
</view>
</picker>
</form>
</view>
</template>- 页面逻辑
我们在页面的JS文件中实现省市区数据的读取和选择的逻辑,代码如下:
<script>
export default {
data() {
return {
province: [],
city: [],
district: [],
index1: 0,
index2: 0,
index3: 0
}
},
methods: {
onProvinceChange(e) {
const index = e.detail.value;
this.setData({
province: this.data.provinceList.map(item => item.name),
city: this.data.provinceList[index].cityList.map(item => item.name),
district: this.data.provinceList[index].cityList[0].districtList,
index1: index,
index2: 0,
index3: 0
});
},
onCityChange(e) {
const index = e.detail.value;
this.setData({
district: this.data.provinceList[this.data.index1].cityList[index].districtList,
index2: index,
index3: 0
});
},
onDistrictChange(e) {
const index = e.detail.value;
this.setData({
index3: index
});
}
},
created() {
wx.request({
url: '/data.json',
success: res => {
const { provinceList } = res.data;
this.setData({
province: provinceList.map(item => item.name),
city: provinceList[0].cityList.map(item => item.name),
district: provinceList[0].cityList[0].districtList
});
}
});
}
}
</script>
