今天在微信小程序中使用 Picker view 这个组件,遇到一个设置默认值选中不生效的问题。
按照微信的官网文档,如果需要设置默认选中项可以这样设置
我的代码中是在 attached 生成的选项数据,刚开始是在 data 里面直接设了默认选中值,duration: [1]
,但是不管怎么样都是不生效。后来就推测是因为选项数据在 attached 里面初始化完成的,所以设置的不生效。后来修改在 attached 里面完成选项数据初始化之后再去设置setDefaultDuration
一下默认值就解决了;为什么能够更新呢,我推测是因为 duration 是响应式数据,设置之后会驱动页面更新,自然就会默认选中到对的设置项。\
所以在生成选项数据之后最好重新设置一下默认选中的下标。
<picker-view class="picker-view-single" mask-class="picker-mask" indicator-class="picker-indicator" value="{{duration}}" bindpickstart="onPickStart" bindchange="onTimeChange">
<picker-view-column class="picker-column hour-column">
<view class="picker-item {{ duration[0] === index ? 'active' : '' }}" wx:for="{{pickerHours}}" wx:key="index">
<view class="text">{{ item.label }}</view>
</view>
</picker-view-column>
</picker-view>
lifetimes:{
attached(){
let pickerHours = this.getHourList()
let pickerMinutes = this.getMinuteList()
let pickerSeconds = this.getSecondList()
this.setData({
pickerHours:[...pickerHours],
pickerMinutes:[...pickerMinutes],
pickerSeconds:[...pickerSeconds]
})
// 因为在这里加载了Picker 数据源,所以在这里设置默认值
this.setDefaultDuration()
// () => { this.setData({
// duration: [1],
//}) }
},
},