从官方文档中可以看到picker-view组件的value值可用于设置组件的第几项(也就是默认值),但是如果picker-view中选项数组的是在页面加载后从服务器获取再设置的,而piker-view组件的value值是在data里设置的,所以会出现value值先于选项数组赋值的情况,这样会出现value值不起效,无法设置默认值
官方案例中,数组的赋值是通过函数获取的,不是setData,也就是说选项数组和value的设置可以在加载时按序赋值,这样的确可以解决value值先于选项数组赋值,默认值不起效的情况,但是如果选项数组的数据请求需要用到页面参数时呢,该怎么解决
<
picker-view
indicator-style
=
"height: 50px;"
style
=
"width: 100%; height: 300px;"
value
=
"{{value}}"
bindchange
=
"bindChange"
>
<
picker-view-column
>
<
view
wx:for
=
"{{years}}"
style
=
"line-height: 50px"
>{{item}}年</
view
>
</
picker-view-column
>
</
picker-view
>
<
button
bindtap
=
'click'
>输出</
button
>
function getArr(){
return [1,2,3,4]
}
Page({
data: {
years: [],
value: [1]
},
onLoad: function (options) {
this.setData({
years: getArr(),
value: [3]
})
},
click() {
this.setData({
value: [2]
})
}
})
例如这个例子,click事件能更改value的值,但在onload里获取数组的值后无法更改value的值
没明白问题是什么。
就算数据需要走网络请求异步加载,那也同样可以在收到后台返回之后再调用setData方法设置picker-view-column数据以及下标value。