uniapp中picker选择器滚动时确认关闭导致数据无法及时更新解决方案picker-view

uniapp在picker内容还在滚动时或滚动回弹动画还未结束时,点确定关闭弹出的picker,数据无法及时更新。

官方回复是:需等待一下,或手动触停滚动再点确定。所有平台均如此

在这里插入图片描述

解决方案:picker-view

修改 picker 成:picker-view (样式要自己写)

<template>
	<view class="uni-list-cell-db">
		<button @click="changeBox" type="default">点击选择: {{arr[val[0]]}}</button>
		
		// 如果滚动中关闭,要获取 关闭前最后用一次值,则将代码里 v-show="visible" 改成:v-if="visible"
		// 当前模式 是关闭后,仍要获取最终滚动值
		<view v-show="visible">
			<picker-view :value="val" @pickend="pickend" @pickstart="pickstart" @change="bindChange" class="picker-view">
				<picker-view-column>
					<view class="item" v-for="(item,index) in arr" :key="index">{{item}}</view>
				</picker-view-column>
			</picker-view>
			<button @click="changeBox" type="default">确定</button>
		</view>
	</view>
</template>

<script>
	let arr = [];
	for (var i = 0; i < 100; i++) {
		arr.push(i)
	}
	
	export default {
		data() {
			return {
				arr,
				val: [],
				visible: false,
			}
		},
		methods: {
			changeBox() {
				this.visible = !this.visible
			},
			bindChange: function(e) {
				console.log('索引:' + e.target.value)
				this.val = e.target.value;
				// ...
			}
		}
	}
</script>

<style>
	button {
		margin: 0 30rpx;
	}

	.picker-view {
		width: 100vw;
		height: 600rpx;
		margin-top: 200rpx;
	}

	.item {
		text-align: center;
	}
</style>

效果:
在这里插入图片描述

温馨提示:

如果滚动中关闭,要获取 关闭前最后用一次值,则将代码里 v-show=“visible” 改成:v-if=“visible”

模拟 picker 样式:定位,背景,确定取消,自己写。

picker-view中:仅微信小程序2.3.1+、快手小程序 支持
@pickstart 当滚动选择开始时候触发事件
@pickend 当滚动选择结束时候触发事件


到处~~ 完结,有问题私我或者留言

UniApp,可以使用uni-data-picker级联选择器来实现数据的回显以下是一种实现方法: 1 在后端接口返回的数组数据,每个元素应包含一个唯一的标识字段和一个用于显示的字段。例如,可以使用id字段作为唯一标识,name字段作为显示内容。 2. 在前端页面,使用uni-data-picker组件,并设置其bindchange事件监听器。 3. 在页面的data定义一个空数组selectedItems,用于存储用户选择的数据。 4. 在bindchange事件监听器,获取到用户选择的数据,并将其存储到selectedItems数组。 5. 在uni-data-picker组件上设置value属性为selectedItems数组,即可实现数据的回显。 以下是一个示例代码: ```html <template> <view> <uni-data-picker @change="handleChange" :value="selectedItems"> <picker-view-column :values="data" /> </uni-data-picker> </view> </template> <script> export default { data() { return { data: [], // 后端返回的数组数据 selectedItems: [], // 存储用户选择的数据 }; }, methods: { handleChange(e) { // 获取用户选择的数据 this.selectedItems = e.detail.value; }, }, }; </script> ``` 在上述示例,`data`是后端返回的数组数据,`selectedItems`是用于存储用户选择数据的数组。在`handleChange`方法,将用户选择的数据存储到`selectedItems`。通过将`selectedItems`数组赋值给uni-data-picker组件的value属性,实现数据的回显。 请注意,以上示例只是简单示例,实际情况可能需要根据后端返回的数据结构进行适当的调整和处理。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值