三级联动下拉的json数据应该怎么写,并且如何渲染
时间: 2024-05-09 15:16:36 浏览: 9
三级联动下拉的 JSON 数据可以这样写:
```
{
"province": [
{
"name": "北京市",
"code": "110000",
"city": [
{
"name": "北京市",
"code": "110100",
"area": [
{
"name": "东城区",
"code": "110101"
},
{
"name": "西城区",
"code": "110102"
},
...
]
}
]
},
{
"name": "上海市",
"code": "310000",
"city": [
{
"name": "上海市",
"code": "310100",
"area": [
{
"name": "黄浦区",
"code": "310101"
},
{
"name": "徐汇区",
"code": "310104"
},
...
]
}
]
},
...
]
}
```
其中,`province` 数组中存放每个省份的信息,每个省份包括 `name`(省份名称)和 `code`(省份代码),以及 `city` 数组,`city` 数组中存放该省份下面的所有城市信息,每个城市包括 `name`(城市名称)和 `code`(城市代码),以及 `area` 数组,`area` 数组中存放该城市下面的所有区县信息,每个区县包括 `name`(区县名称)和 `code`(区县代码)。
在前端渲染时,可以使用 Vue、React 等框架来进行渲染。例如,在 Vue 中可以使用 `v-for` 指令来遍历数据,并使用 `v-model` 指令来绑定数据,实现三级联动下拉框。代码示例如下:
```
<template>
<div>
<select v-model="selectedProvince" @change="changeProvince">
<option value="">请选择省份</option>
<option v-for="province in provinces" :value="province">{{ province.name }}</option>
</select>
<select v-model="selectedCity" @change="changeCity">
<option value="">请选择城市</option>
<option v-for="city in cities" :value="city">{{ city.name }}</option>
</select>
<select v-model="selectedArea">
<option value="">请选择区县</option>
<option v-for="area in areas" :value="area">{{ area.name }}</option>
</select>
</div>
</template>
<script>
export default {
data() {
return {
provinces: [], // 省份列表
cities: [], // 城市列表
areas: [], // 区县列表
selectedProvince: null, // 当前选中的省份
selectedCity: null, // 当前选中的城市
selectedArea: null // 当前选中的区县
}
},
created() {
// 加载省份数据
this.loadProvinces()
},
methods: {
// 加载省份数据
loadProvinces() {
// 发送请求获取省份数据
// 示例代码,具体请求方法根据项目实际情况而定
axios.get('/api/provinces').then((response) => {
this.provinces = response.data
})
},
// 切换省份
changeProvince() {
// 获取当前选中的省份
const province = this.selectedProvince
if (!province) {
return
}
// 加载城市数据
// 发送请求获取城市数据
// 示例代码,具体请求方法根据项目实际情况而定
axios.get(`/api/cities?provinceCode=${province.code}`).then((response) => {
this.cities = response.data
this.selectedCity = null
this.areas = []
this.selectedArea = null
})
},
// 切换城市
changeCity() {
// 获取当前选中的城市
const city = this.selectedCity
if (!city) {
return
}
// 加载区县数据
// 发送请求获取区县数据
// 示例代码,具体请求方法根据项目实际情况而定
axios.get(`/api/areas?cityCode=${city.code}`).then((response) => {
this.areas = response.data
this.selectedArea = null
})
}
}
}
</script>
```
在这个示例中,我们通过 `v-for` 指令来遍历数据,通过 `v-model` 指令来绑定数据。当用户选择省份时,会触发 `changeProvince` 方法,该方法会根据选中的省份发送请求获取该省份下面的所有城市,并更新 `cities` 数组,清空 `areas` 数组和 `selectedCity`、`selectedArea` 变量。当用户选择城市时,会触发 `changeCity` 方法,该方法会根据选中的城市发送请求获取该城市下面的所有区县,并更新 `areas` 数组,清空 `selectedArea` 变量。最终,用户选择完省份、城市、区县后,三个变量的值会更新为对应的省份、城市、区县对象,可以将这些对象提交给后端进行处理。