关于uniapp省市区三级联动选择器

文章详细描述了在使用DCloud的省市区三级联动选择器时遇到的问题,包括regionId超过六位数时的回显失败以及在选择省市区时自动选择到第1位的错误。作者提供了修正方法,包括修改handleDefaultRegion函数的逻辑以及handleColumnChange事件处理,以确保正确回显和选择行为。
摘要由CSDN通过智能技术生成

使用的是省市区三级联动选择器(支持APP、H5、小程序) - DCloud 插件市场

1.回显时regionId超过六位数时回显失败

改正方法:

handleDefaultRegion(region){
				// console.log(region,"region")
                const isCode = !Array.isArray(region)
                this.isInitMultiArray = false;
                let children = this.CHINA_REGIONS;
				let num =0;
                for(let i=0;i<3;i++){
                    for(let j=0;j<children.length;j++){
						let condition;
						if(i==2){
							 condition = isCode?String(children[j].code).slice(0)==region.slice(0):children[j].name.includes(region[i]);
							// console.log(String(children[j].code).slice(0),region.slice(0))
						}else{
							 condition = isCode?String(children[j].code).slice(0,(i+1)*2)==region.slice(0,(i+1)*2):children[j].name.includes(region[i]);
							// console.log(String(children[j].code).slice(0,(i+1)*2)==region.slice(0,(i+1)*2))
							// console.log(String(children[j].code).slice(0,(i+1)*2),region.slice(0,(i+1)*2))
						}
						
					   if(condition){
							num++;
                           // 匹配成功进行赋值
                           // console.log(i,j,children.length-1);
                           // children = children[j].childs;
						   
						   
						   if(children[j].childs&&children[j].childs.length>0){
							   children = children[j].childs;
						   }else{ 
								let arr = [];
								arr.push(children[j]);
								children =arr;
						   }
						  
                           if(i==0){
                               this.cityArr = children 
							   
                           }else if(i==1){
                               this.districtArr = children 
                           }
						  
                           this.$set(this.multiIndex,i,j)
                          
                           break;
                       }else{
                           // 首次匹配失败就用默认的初始化
                           // console.log(i,j,children.length-1,"匹配失败");
                           if(i==0 && j==(children.length-1)){
                               this.isInitMultiArray = true;
							   this.multiIndex = [0,0,0]
							   this.$emit('failreagion');
                           }
						   // this.$emit('failreagion')
                       }
                    }
                }
				
				if(num == 3){
					let address = [this.CHINA_REGIONS[this.multiIndex[0]],this.cityArr[this.multiIndex[1]],this.districtArr[this.multiIndex[2]]];
					this.$emit('getRegion',address)
				}else{
					this.$emit('failureRegion')
					this.multiIndex = [0,0,0]
					this.isInitMultiArray = true;
					
				}
				
				
				
				
            }

其次在defaultRegion的监听里把那个region.length==6删掉,把判断条件判断if(region);

2:选择省的时候,市,区自动选择到第1位。选择市时,区自动选到第1位;

handleColumnChange(e){
                // console.log(e);
                this.isInitMultiArray = false;
                const that = this;
                let col = e.detail.column;
                let row = e.detail.value;
                that.multiIndex[col] = row;
                try{
                    switch(col){
                        case 0:
							that.multiIndex[1]=0;
							that.multiIndex[2]=0;
                            if(CHINA_REGIONS[that.multiIndex[0]].childs.length==0){		
                                that.cityArr = that.districtArr = [CHINA_REGIONS[that.multiIndex[0]]]
                                break;
                            }
                            that.cityArr = CHINA_REGIONS[that.multiIndex[0]].childs
                            that.districtArr = CHINA_REGIONS[that.multiIndex[0]].childs[that.multiIndex[1]].childs
                            break;
                        case 1:
							that.multiIndex[2]=0;
                            that.districtArr = CHINA_REGIONS[that.multiIndex[0]].childs[that.multiIndex[1]].childs
                            break;
                        case 2:
                            break;
                    }
                }catch(e){
                    // console.log(e);
                    that.districtArr = CHINA_REGIONS[that.multiIndex[0]].childs[0].childs
                }
                
            },

欢迎指正

### 回答1: uniapp是一款跨平台的开发框架,可以让开发者使用Vue.js来开发iOS、Android、H5等多个平台的应用程序。要实现省市区三级联动功能,可以使用uniapp的picker选择器组件结合数据源来实现。 首先,需要准备好省市区的数据源。可以通过网络请求获取数据,也可以在本地定义一个JSON数据文件来存储省市区的信息。 然后,在页面中使用picker选择器组件来展示三级联动的效果。可以使用三个picker组件来分别展示省、市、区的选项,用户通过滑动选择器中的选项来进行选择。 在数据绑定方面,可以通过在data中定义一个变量来存储用户的选择结果。比如,可以定义一个数组变量selected来存储用户选择的省、市、区的信息。通过监听picker的change事件,在事件处理函数中更新selected数组的值。 最后,在页面中展示用户选择的结果。可以使用文本框等组件来展示省、市、区的信息,将selected数组中的值显示出来。 通过上述步骤,就可以实现uniapp省市区三级联动的功能。用户可以通过滑动选择器来选择省、市、区的选项,选择结果会实时更新并展示在页面上。 ### 回答2: uniapp是一款跨平台的开发框架,适用于开发微信小程序App和H5页面。要实现省市区三级联动,可以采用uniapp的picker组件以及相关的数据处理方法。以下是实现的步骤: 1. 在页面的vue文件中,引入picker组件,并将其放置在需要选择省市区的位置。例如: ``` <template> <view> <picker :value="value" mode="multi-selector" @change="pickerChange"> <view class="picker">选择省市区</view> </picker> </view> </template> ``` 2. 在`data`中定义需要使用的数据,如省市区的数据源,以及选择结果的变量。例如: ``` data() { return { value: [], provinces: ['北京市', '上海市', '广东省', ...], cities: { '北京市': ['北京市'], '上海市': ['上海市'], '广东省': ['广州市', '深圳市', '珠海市', ...], ... }, areas: { '北京市': { '北京市': ['东城区', '西城区', '朝阳区', ...], ... }, '上海市': { '上海市': ['黄浦区', '徐汇区', '长宁区', ...], ... }, ... } }; }, ``` 3. 在`methods`中定义选择器的change事件处理函数,用来更新选择结果的变量。例如: ``` methods: { pickerChange(e) { const value = e.detail.value; const province = this.provinces[value[0]]; const city = this.cities[province][value[1]]; const area = this.areas[province][city][value[2]]; this.value = value; console.log('选择结果:', province, city, area); // 可以在此处理选择结果,如发送请求获取相应的数据等 }, } ``` 以上就是使用uniapp实现省市区三级联动的基本步骤。利用picker组件和相应的数据处理方法,可以实现用户选择省市区的功能,并获取相应的选择结果,方便后续的数据处理和操作。 ### 回答3: Uniapp是一种基于Vue框架的跨平台开发工具,可以方便快捷地开发出同时适用于多个平台的应用程序。要实现省市区三级联动功能,可以通过以下步骤来完成。 首先,我们需要准备好省市区的数据。可以在后端提供接口获取到省市区的数据,然后将数据存储到前端的数据源中。 然后,在前端的页面中布局好三个级别的选择框,用于显示省市区的选择结果。 接着,需要为每个选择框绑定一个change事件,在选择框的change事件中根据选择的值,动态更新下一级选择框的选项。 具体的实现方式是,当省选择框的值发生改变时,根据选择的省份,在数据源中找到对应的市的数据,并更新市选择框的选项。当市选择框的值发生改变时,根据选择的市,再次在数据源中找到对应的区的数据,并更新区选择框的选项。 最后,当三个选择框的值都确定之后,就可以得到最终的选择结果,可以将结果保存到数据源中,或者作为参数传递给后端接口进行相应的操作。 总结起来,实现uniapp省市区三级联动的过程包括准备数据、布局页面、绑定change事件和更新选项。通过这样的实现,用户可以方便地选择省市区信息,并进行相应的操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值