uview2.0的u-picker组件实现省市二级联动
时间: 2024-04-30 19:21:45 浏览: 127
uview2.0的u-picker组件确实可以用来实现省市二级联动,具体的实现方法如下:
1. 首先,需要准备好省份和城市的数据,可以是一个数组,也可以是一个对象。数组的每个元素表示一个省份,对象的每个属性表示一个省份。省份下面可以有多个城市,可以是数组,也可以是对象。
2. 在u-picker组件中,设置两个列,第一列显示省份,第二列根据选择的省份动态生成城市列表。
3. 当选择了某个省份后,通过该省份所对应的数据,生成该省份下的所有城市。
4. 将生成的城市列表作为第二列的数据源,重新渲染u-picker组件。
5. 最后,可以监听u-picker组件的change事件,在事件回调函数中获取最终选择的省份和城市。
以下是示例代码:
```html
<template>
<view>
<u-picker :columns="columns" @change="onChange"></u-picker>
</view>
</template>
<script>
export default {
data() {
return {
provinceList: [
{ name: '北京', cities: ['北京'] },
{ name: '上海', cities: ['上海'] },
{ name: '天津', cities: ['天津'] },
{ name: '重庆', cities: ['重庆'] },
{
name: '河北省',
cities: ['石家庄', '唐山', '邯郸', '秦皇岛', '保定', '张家口', '承德', '廊坊', '沧州', '衡水']
},
{
name: '山西省',
cities: ['太原', '大同', '阳泉', '长治', '晋城', '朔州', '晋中', '运城', '忻州', '临汾', '吕梁']
},
// 省份数据还可以继续添加...
],
columns: [{ values: [], defaultIndex: 0 }, { values: [], defaultIndex: 0 }]
}
},
mounted() {
// 初始化第一列数据
this.columns[0].values = this.provinceList.map(item => item.name)
// 初始化第二列数据
this.columns[1].values = this.provinceList[0].cities
},
methods: {
onChange(event) {
const { picker, value, index } = event.detail
if (index === 0) { // 如果选择了省份
const province = this.provinceList[value]
this.columns[1].values = province.cities // 根据省份生成城市列表
picker.setColumnValues(1, province.cities) // 重新渲染第二列
}
// 最终选择的省份和城市
const province = this.columns[0].values[value[0]]
const city = this.columns[1].values[value[1]]
console.log('省份:', province, '城市:', city)
}
}
}
</script>
```
上面的代码中,我们使用了一个数组作为省份数据源,每个省份是一个对象,包含name和cities属性。name表示省份名称,cities表示该省份下的城市列表。在组件的mounted钩子函数中,我们初始化了第一列的数据,将所有省份的名称作为第一列的选项。同时,我们根据第一个省份的数据,生成第二列的数据,将第一个省份下的城市作为第二列的选项。
当用户选择了某个省份后,我们在组件的change事件回调函数中,根据选择的省份,从省份数据中获取到该省份下的城市列表,重新渲染第二列的数据。最后,在事件回调函数中,我们可以获取到最终选择的省份和城市。
阅读全文