当前位置:   article > 正文

关于uniapp的picker的使用_uni-data-picker不用最后一个节点拿值

uni-data-picker不用最后一个节点拿值

最近入职的一家公司是基于uniapp开发app的,很多东西不懂,最近遇到一个关于picker选择的问题

要求二级联动,左边选择省份,右边选择市

在这里插入图片描述
但是picker的原生的选择只有
在这里插入图片描述
这样的三级联动,没有选择省然后再选择市这样单独选择的模式

然后我去uniapp的官网查看了 picker的描述和属性:
mode属性:
它有五个属性值

  1. mode = selector 表示普通选择器
属性名说明
range这个是picker展示的用于选择的数据,数据格式为Array或者Object格式
range-key这是展示的数据的值,当range的数据是一个数组包裹对象的格式,通过它来表示显示对象的那个属性
value这属性表示显示的下标,就是表示选择了range的第几个(就是选择的值相对于的下标,是从0开始的)
@change用于定义改变了(选择了列表)的事件,其中event.detail 的值就是当前选择的下标
disabled表示是否禁用,就是是否可以触发选择事件,如果值为true表示改picker不可以选择
@cancel取消选择或点遮罩层收起 picker 时触发
  1. mode = multiSelector 表示多列选择器
属性说明
range这里的是展示的数据,这里的数据应该是一个二维数组,就是数组包对象,对象再包数组的格式
range-key这个表示需要显示的数据的键值对中的键
value他的值是下标从0开始
@changevalue 改变时触发 change 事件,event.detail = {value: value}
@columnchange这是多列显示特有的事件,当某一列发生改变的时候触发,event.detail = {column: column, value: value},column表示改变的列,value表示改变的当列的下标的值
@cancel取消选择时触发的事件
disabled表示改选择框是否禁用,默认值为false

因为JavaScript的限制不可以检测数组的下标发生改变或者通过数组的下标来修改数组对应的值
在这里插入图片描述
但是再微信开发工具的pc模拟器可能出现拖动数据错乱,但是真机使用正常

解决办法,使用splice方法通过下标改对应数组的数据即可
在这里插入图片描述
对于vue的解决办法有两种,一个是用set方法,另外一个是使用 splice方法
在这里插入图片描述
3. mode = time 表示时间选择器

属性说明
value表示选中的时间,格式为"hh:mm"
start表示有效时间范围的开始,格式为字符串,字符串格式为"hh:mm"(App不支持)
end表示有效时间范围的结束,格式为字符串,字符串格式为"hh:mm"(App不支持)
@changevalue 改变时触发 change 事件,event.detail = {value: value}
@cancel取消选择时触发的事件
disabled表示是否禁用改选择框,默认值为false
  1. mode = date 表示日期选择器
属性说明
value表示选中的日期,格式为"YYYY-MM-DD"
start表示有效日期范围的开始,字符串格式为"YYYY-MM-DD"
end表示有效日期范围的结束,字符串格式为"YYYY-MM-DD"
fields有效值 year,month,day,表示选择器的粒度,默认为day,year表示选择粒度为年,month表示选择选择选择的粒度为月
@changevalue 改变时触发 change 事件,event.detail = {value: value},同上表示下标
@cancel取消选择时触发的事件
disabled是否禁用,默认值为false
  1. mode = region 表示地区选择器
    多列picker方式的地区选择不能运行在支付宝小程序上,只有基于picker-view的可以全端运行
属性说明
value表示选中的省市区,默认选中每一列的第一个值,数组格式
custom-item可为每一列的顶部添加一个自定义的项
@changevalue 改变时触发 change 事件,event.detail = {value: value},同上
@cancel取消选择时触发
disabled是否禁用,默认值为false
<view class="list">
				<view class="school">
					<picker mode="selector" :range="provinceData" range-key="label"  @change="sheng">
						<image class="arrow_down" src="/static/images/login_arrow_down.png" mode=""></image>
						<text class="check_school">{{province}}</text>
					</picker>
				</view>
				<view class="class">
					<picker mode="selector" :range="city1" range-key="label" :disabled='jy'  @change="shi">
						<image class="arrow_down" src="/static/images/login_arrow_down.png" mode=""></image>
						<text class="check_school">{{cityy}}</text>
					</picker>
				</view>
			</view>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
sheng(e){
				var _this = this 
				console.log(e);
				var index = e.detail.value 
				_this.province = _this.provinceData[index].label 
				_this.city1  = _this.city[index] 
				// console.log(JSON.stringify(_this.city1));
				
				_this.jy = false
			}

shi(e){
				var _this = this 
				var index = e.detail.value 
					_this.cityy = _this.city1[index].label 
			},
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

关于城市的数据,是引入uniapp对应的城市的包,
结果研究发现它们的城市的数据是关于下标对应的,就是说第一个省份的包的对应省的下标,就是关于市列表包对应的下标
在这里插入图片描述
在这里插入图片描述
所以只需要通过value获取当前选择的省份,再通过对应的下标获取对应的市级别的列表即可
这里需要注意的是,需要对市和一下的级别的选择添加一个禁止属性,因为对于逻辑上来说,只有选择省分后才能选择市

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/571088
推荐阅读
相关标签
  

闽ICP备14008679号