j***@163.com
j***@163.com
  • 发布:2019-07-18 22:02
  • 更新:2023-05-09 18:20
  • 阅读:2221

【报Bug】关于PickerView用JS动态修改value,没有监听到数据变化的问题

分类:uni-app

详细问题描述

我写了一个三级联动的PickerView,其中第三列的数据不能小于第二列的数据,类似于第二列数据是一个起始时间,第三列数据是一个结束时间,因此在第二列数据改变之后,需要保证第三列数据的值大于等于第二列数据,因此监听到PickerView的选项值变化后,判断第三列数值是否小于第二列数据,如果是,则将第三列数据值设置为第二列数据值。
当滑动了第二列数据之后,如果第三列值小于第二列值了,则设置第三列的值为第二列的值,pickerView能顺利刷新,但是将第三列数据滑动到小于第二列数据时,将第三列数据设置回跟第二列数据相同的值,pickerView没有刷新,并且页面中其它使用了PickerView的value那个数组的视图也没有更新,目测是这个数组的变化没有同步更新视图。

重现步骤

布局代码如下:
<picker-view style="height: 300px;" :value="timePickerValue"
@change="onCourseTimePickerChanged" :indicator-style="{height: '36px'}">
<picker-view-column>
<view class="time-selector-item" v-for="(item,index) in weekDays" :key="index">{{item}}</view>
</picker-view-column>
<picker-view-column>
<view class="time-selector-item" v-for="(item,index) in classPositions" :key="index">
第{{item}}节到
</view>
</picker-view-column>
<picker-view-column>
<view class="time-selector-item" v-for="(item,index) in classPositions1" :key="index">
第{{item}}节
</view>
</picker-view-column>
</picker-view>

data下的数据如下:

timePickerValue: [0, 0, 0],
timePickerResult: [0, 0, 0],
weekDays: ["周一", "周二", "周三", "周四", "周五", "周六", "周日"],
classPositions: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
classPositions1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],

监听PickerView值改变的代码如下:
onCourseTimePickerChanged(ev) {
let data = ev.detail.value
console.log(data)
this.timePickerResult = data
if (data[2] < data[1]) {
data[2] = data[1]
let value = 0
setTimeout(() => {
this.timePickerValue = data
}, 0)
}
},

经过我的多次尝试,发现只要设置两次timePickerValue就可以顺利刷新,并且第二次设置timePickerValue必须要在下一次事件循环时才会让PickerView更新。我猜测可能是uni-app更新data数据的diff机制存在一定的bug导致了我的问题。修改后的代码如下:

onCourseTimePickerChanged(ev) {
let data = ev.detail.value
console.log(data)
this.timePickerResult = data
if (data[2] < data[1]) {
data[2] = data[1]
let value = 0
this.timePickerValue = [0,0,0]
setTimeout(() => {
this.timePickerValue = data
}, 0)
}
},

IDE运行环境说明

IDE:HBuilderX

[IDE版本号] :2.1.1.20190716

[windows版本号] win10

uni-app运行环境说明

运行环境为微信小程序,项目由HBuilderX创建,编译模式是自定义组件模式

2019-07-18 22:02 负责人:无 分享
已邀请:
a***@gmail.com

a***@gmail.com

老铁 帮大忙了!

西恩十月

西恩十月

老铁 帮大忙了!

l***@163.com

l***@163.com

感谢大佬, 卡了一下午了

要回复问题请先登录注册