省市区三级联动(vue)
时间: 2023-06-23 15:07:09 浏览: 45
好的,我可以为您提供一些关于省市区三级联动的Vue组件和代码示例。
首先,您需要准备一个包含省市区数据的JSON文件,格式如下:
```json
{
"provinces": [{
"name": "北京市",
"cities": [{
"name": "北京市",
"areas": ["东城区", "西城区", "朝阳区", "丰台区", "石景山区", "海淀区", "门头沟区", "房山区", "通州区", "顺义区", "昌平区", "大兴区", "怀柔区", "平谷区", "密云区", "延庆区"]
}]
},{
"name": "上海市",
"cities": [{
"name": "上海市",
"areas": ["黄浦区", "徐汇区", "长宁区", "静安区", "普陀区", "虹口区", "杨浦区", "闵行区", "宝山区", "嘉定区", "浦东新区", "金山区", "松江区", "青浦区", "奉贤区", "崇明区"]
}]
}]
}
```
然后,您可以创建一个`AddressPicker`组件,用于展示省市区选择器,并且可以根据选择的省市区返回完整的地址信息。下面是一个简单的示例代码:
```html
<template>
<div>
<select v-model="selectedProvince" @change="onProvinceChange">
<option v-for="province in provinces" :value="province">{{ province.name }}</option>
</select>
<select v-model="selectedCity" @change="onCityChange">
<option v-for="city in cities" :value="city">{{ city.name }}</option>
</select>
<select v-model="selectedArea" @change="onAreaChange">
<option v-for="area in areas" :value="area">{{ area }}</option>
</select>
</div>
</template>
<script>
import addressData from '@/assets/address.json';
export default {
data() {
return {
provinces: addressData.provinces,
selectedProvince: null,
cities: [],
selectedCity: null,
areas: [],
selectedArea: null
};
},
methods: {
onProvinceChange() {
this.selectedCity = null;
this.selectedArea = null;
if (this.selectedProvince) {
this.cities = this.selectedProvince.cities;
} else {
this.cities = [];
}
},
onCityChange() {
this.selectedArea = null;
if (this.selectedCity) {
this.areas = this.selectedCity.areas;
} else {
this.areas = [];
}
},
onAreaChange() {
// do nothing
},
getAddress() {
if (this.selectedProvince && this.selectedCity && this.selectedArea) {
return `${this.selectedProvince.name} ${this.selectedCity.name} ${this.selectedArea}`;
} else {
return null;
}
}
}
};
</script>
```
以上代码中,`AddressPicker`组件使用了一个`addressData`变量来存储省市区数据。组件中包含了三个选择框,分别用于选择省、市、区。当选择省或市时,会动态更新城市和区域的选择框。同时,组件还提供了一个`getAddress`方法,用于获取当前选择的完整地址信息。
最后,您可以在需要使用省市区选择器的地方引入`AddressPicker`组件,并将其添加到模板中即可。