z***@163.com
z***@163.com
  • 发布:2024-08-19 14:00
  • 更新:2024-10-17 14:50
  • 阅读:180

在uni.chooseImage的success回调里面无法更新响应式数据也无法使用setTimeout

分类:uni-app x

uni-app x项目,开发ISO App.
avatar是响应式变量,即:ref变量,用于给<image>显示图片,我的目的是用uni.chooseImage选择图片后显示在<image>里,后续再上传,不是选择好图片就直接上传。
模板:

<template>  
    <view class="avatar-box">  
        <text style="margin-top: 8px;">头像</text>  
    <image class="avatar-img" :src="avatar" mode="aspectFit" ></image>  
    </view>  
</template>  
JavaScript:  
    uni.chooseImage({  
        count: 1,  
    sizeType: ['original', 'compressed'],  
    sourceType: ['album'],  
    crop: {  
        width: 200,  
        height: 200  
    },  
    success: (res) => {  
        console.log("Array.isArray(res.tempFilePaths)=" + Array.isArray(res.tempFilePaths));  
        let filepath = res.tempFilePaths[0];  
        //avatar.value = filepath; //如果uni.chooseImage没crop参数是可以用这行的,avatar值能被更改,图片也会显示出来,但是我需要crop参数,用这行不但无效而且还会导致后面用uni.showModal()里面的回调也失败。  
        //因为无法直接更改avatar的值,所以想用setTimeout 延时更改avatar值,但结果是无法执行setTimeout里面的function,也就无法更改avatar的值  
        setTimeout(() => {  
                //这里的任何代码都无法被执行  
        console.log("[setTimeout]");  
        avatar.value = filepath;  
            }, 200);  
        //因为无法使用setTimeout()所以用uni.showModal的回调测试一下,结果avatar值居然可以被更改,所以图片也就显示出来了  
        uni.showModal({  
            title: "title",  
        content: "content",  
        showCancel: false,  
        success: (res) => {  
            avatar.value = filepath;  
        }  
        });  
        }  
    });

总结一下问题:
使用uni.chooseImage选择相册里面的图片时,要使用crop参数,就无法在success回调中更改响应式变量avatar的值,也就无法显示图片,请问这是怎么回事?用uni.showModal()的回调来显示图片不是我想要的,我想要的是用户选择照片后就给显示出来,后续再进行上传,至于上传已经测试通过了,crop参数是有效果的,现在问题是图片选择后没法显示出来。

2024-08-19 14:00 负责人:无 分享
已邀请:
3***@qq.com

3***@qq.com

一样的问题,安卓上能正常运行,iOS不行,模拟器和真机我都试了。
但看到你帖子用 uni.showModal 可以设置。受教。但这效果肯定不行。
这官方bug。请解决下。

  • DCloud_UNI_OttoJi

    按照下面的评论说一下运行情况,我没遇到问题

    2024-10-17 14:50

DCloud_UNI_OttoJi

DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信

我使用 HBuilderX 最新 alpha 运行下面 demo 到 ios 真机图片预览正常,你按照我的案例试一下,说明问题和区别

<template>  
    <view class="avatar-box">  
        <button @click="chooseImage">选择图片</button>  
        <text style="margin-top: 8px;">头像</text>  
        <image class="avatar-img" :src="avatar" mode="aspectFit"></image>  
    </view>  
</template>  

<script setup>  
    const avatar = ref('https://img.yzcdn.cn/vant/cat.jpeg')  

    const chooseImage = () => {  
        uni.chooseImage({  
            count: 1,  
            sizeType: ['original', 'compressed'],  
            sourceType: ['album'],  
            crop: {  
                width: 200,  
                height: 200  
            },  
            success: (res) => {  
                // console.log("Array.isArray(res.tempFilePaths)=" + Array.isArray(res.tempFilePaths));  
                let filepath = res.tempFilePaths[0];  
                console.log('filetPath', filepath)  
                avatar.value = filepath  

            }  
        });  
    };  
</script>

要回复问题请先登录注册