uview2.x u-picker省市二级联动

提示:若干个相关联的事物,一个运动或变化时,其他的也跟着运动或变化叫做联动。

注:此城市联动是结合uView组件进行的二级城市联动

一、结合组件使用

Picker 选择器 | uView 2.0

示例:

<!-- 选择器 -->
	<u-picker :show="show" ref="uPicker" title="选择城市" keyName="name" :columns="cityList" @confirm="confirm"
		@change="changeHandler" @cancel="close">
	</u-picker>

	<u-picker :show="show1" title="选择大厅" :columns="holldata" keyName="name" @confirm="confirm1" @cancel="show1 = false">
	</u-picker>

二、使用方法

代码如下(示例):

export default {
		data() {
			return {
				stausBarHeight: uni.getStorageSync('stausBarHeight'),
				show: false, //城市弹出
				show1: false, //大厅弹出
				
				cityListzc:[],  // 暂存(仅供初次临时存储)
				cityList: [
					// [{'name':"111"},{'name':"122"}],
					// [{'name':"211"},{'name':"222"}]
				], //城市存放处
				city: "", //城市
				
				holldata:[],  // 查询大厅数据
				holl:'',  // 查询大厅
				cityId: '', //城市id
				hollId: '', //大厅id
				phone: '', //电话
				address: '' //地址
			}
		},
		onLoad() {
			this.getCity()
		},
		methods: {
			changeHandler(e) {
				const {
					columnIndex,
					value,
					values, // values为当前变化列的数组内容
					index,
					// 微信小程序无法将picker实例传出来,只能通过ref操作
					picker = this.$refs.uPicker
				} = e;
				// console.log(e);
				// // 当第一列值发生变化时,变化第二列(后一列)对应的选项
				if (columnIndex === 0) {
				// 	// picker为选择器this实例,变化第二列对应的选项
					this.getHoll(e.index,e.value[0].id) //测试
				}
			},
			// 回调参数为包含columnIndex、value、values
			confirm(e) {  // 选择城市确认
				this.city = e.value[0].name +'/'+e.value[1].name;
				this.cityId = e.value[1].id;
				this.show = false;
				this.getAddress(e.value[1].id);
				this.holl = '';
				this.address = '';
				this.phone = '';
			},
			close() {
				this.show = false
			},
			confirm1(e) {
				this.holl = e.value[0].name;
				this.hollId =  e.value[0].id;
				this.address = e.value[0].address;
				this.phone = e.value[0].phone;
				this.show1 = false
			},

			//获取城市信息
			getCity() {
				let that = this;
				let sendData = {};
				that.apifun.unirequest(that.apifun.city, 'post', sendData, (res) => {
					// console.log(res)
					if (res.code === 1) {
						let datas = res.data;
						that.cityListzc = datas;
						let id = datas[0].id;
						that.getHoll(0,id);
					} else {
						that.apifun.toast(res.msg)
					}
				})
			},

			//获取一级大厅信息
			getHoll(index,id) {
				let that = this;
				var picker = this.$refs.uPicker
				let sendData = {
					city_id: id
				};
				that.apifun.unirequest(that.apifun.home, 'post', sendData, (res) => {
					if (res.code === 1) {
						let datas = res.data;
						if(index == 0){
							that.cityList = [that.cityListzc,datas];
						}
						picker.setColumnValues(1, res.data)
					} else {
						that.apifun.toast(res.msg)
					}
				})
			},
			//获取二级大厅信息
			getAddress(id) {
				let that = this;
				let sendData = {
					home_id: id
				};
				that.apifun.unirequest(that.apifun.hall, 'post', sendData, (res) => {
					console.log(res)
					if (res.code === 1) {
						let datas = res.data;
						that.holldata = [datas];
					} else {
						that.apifun.toast(res.msg)
					}
				})
			}
		}
	}

注意:

以上实例包含选中大厅后默认带出地址和电话,如不需要可以去掉

总结

以上就是今天要讲的内容啦,本文仅仅简单介绍了二级城市联动的使用,更多三级城市联动请参考其他大佬的详解哦~~~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
u-picker组件是uView UI库提供的一个选择器组件,可以用于实现类似下拉列表的效果。要实现省市二级联动,可以按照以下步骤进行: 1. 在页面中引入u-picker组件,并设置好需要选择的数据源。 2. 设置u-picker组件的mode属性为"selector",这样它会以选择器的形式展现出来。 3. 设置u-picker组件的range属性为一个数组,数组的元素为对象,每个对象都包含了省份和城市信息。例如: ``` range: [ { province: '北京市', city: ['东城区', '西城区', '朝阳区', '丰台区', '石景山区', '海淀区', '门头沟区', '房山区', '通州区', '顺义区', '昌平区', '大兴区', '怀柔区', '平谷区', '密云县', '延庆县'] }, { province: '天津市', city: ['和平区', '河东区', '河西区', '南开区', '河北区', '红桥区', '东丽区', '西青区', '津南区', '北辰区', '武清区', '宝坻区', '滨海新区', '宁河区', '静海区', '蓟州区'] }, // 其他省市数据... ] ``` 4. 设置u-picker组件的value属性为一个数组,数组的元素分别表示省份和城市被选中的下标。例如: ``` value: [0, 0] ``` 这表示默认选中北京市的东城区。 5. 设置u-picker组件的eventchange事件,当选中某个省份或城市时,会触发这个事件。在这个事件的回调函数中,可以根据当前选中的省份下标,更新城市数据源。例如: ``` eventchange(e) { const val = e.detail.value const range = this.data.range const cities = range[val[0]].city this.setData({ cities: cities, value: [val[0], 0] }) } ``` 这个回调函数会接收一个事件对象e,其中包含了当前选中的省份和城市下标。根据省份下标,可以从数据源中获取对应的城市数据,并更新到页面上。同时,为了避免出现城市数据为空的情况,需要将城市下标设置为0。 6. 在页面中使用u-picker组件,同时设置好相关的属性和事件。例如: ``` <u-picker mode="selector" range="{{range}}" value="{{value}}" bind:change="eventchange"></u-picker> ``` 这样,就完成了省市二级联动的实现。当选择省份时,城市选项会自动更新,同时可以通过value属性控制默认选中的省份和城市。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值