uni-app picker-view组件BUG,与微信小程序picker-view表现不符

uni-app picker-view组件BUG,与微信小程序picker-view表现不符

开发环境 版本号 项目创建方式
Windows win10 HBuilderX

产品分类:uniapp/小程序/微信

示例代码:

```html
<template>  
    <picker-view :value="value" indicator-style="height: 50px;" @change="bindChange">  
        <picker-view-column>  
                <view class="item" v-for="(item) in list1" :key="item">{{item}}</view>  
        </picker-view-column>  
        <picker-view-column>  
                <view class="item" v-for="(item) in list2" :key="item">{{item}}</view>  
        </picker-view-column>  
    </picker-view>  
</template>  

<script>  
export default {  
data () {  
    return {  
        value: [0, 0],  
        list1: ['测试1', '测试2'],  
        list2: ['测试11', '测试22'],  
        indicatorStyle: `height: 50px;`  
    }  
},  
methods: {  
    bindChange (e) {  
        console.log('change::', e)  
        if (e.detail.value[0] === 0) {  
            this.list2 = ['测试11', '测试22']  
            this.value = [0, 0]  
        } else {  
            this.list2 = ['测试11', '测试22', '测试33', '测试44']  
            this.value = [1, 3]  
        }  
    }  
}  
</script>  

<style>  
picker-view {  
    width: 100%;  
    height: 600rpx;  
    margin-top:20rpx;  
}  
.item {  
    line-height: 100rpx;  
    text-align: center;  
}  
</style>

更多关于uni-app picker-view组件BUG,与微信小程序picker-view表现不符的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

有没有官方的人看下确认下

更多关于uni-app picker-view组件BUG,与微信小程序picker-view表现不符的实战教程也可以访问 https://www.itying.com/category-93-b0.html


4天了 没消息

这个问题就没人在意吗,还是用HBuilderX开发小程序的人太少了?

这是一个已知的uni-app中picker-view组件与微信原生小程序表现不一致的问题。主要差异点在于:

  1. 在微信小程序中,picker-view的value变更会立即生效并触发滚动动画
  2. 而在uni-app中,直接修改value不会触发滚动动画,表现较为生硬

解决方案建议:

  1. 使用setTimeout延迟设置value值:
bindChange (e) {
    console.log('change::', e)
    if (e.detail.value[0] === 0) {
        this.list2 = ['测试11', '测试22']
        setTimeout(() => {
            this.value = [0, 0]
        }, 50)
    } else {
        this.list2 = ['测试11', '测试22', '测试33', '测试44']
        setTimeout(() => {
            this.value = [1, 3]
        }, 50)
    }
}
  1. 或者使用$nextTick:
bindChange (e) {
    // ...其他代码
    this.$nextTick(() => {
        this.value = [1, 3]
    })
}
回到顶部