uni-app APP和H5平台image组件SRC数据修改后无法刷新图片

uni-app APP和H5平台image组件SRC数据修改后无法刷新图片

示例代码:

<image :src="bg"></image>  

<script>  
......  

data() {  
return {  
    bg:null  
   }  
}  
onLoad() {  
            let that=this;  
            that.bg=that.$comjs.api.staticUrl+'image/map1/bg.jpg'  

}
</script>

操作步骤:

测试image图片组件src修改无效。APP和H5端都不行。小程序中正常。

预期结果:

图片组件中的src在方法中修改后,图片应该刷新。

实际结果:

图片组件中的src在方法中修改后,图片没有刷新。APP和H5中有这个问题。 小程序中正常。

bug描述:

未使用setup。image图片组件src数据修改后,模板中的数据不更新。小程序中正常。APP和H5中都不能自动更新修改后的数据。初始化的数据是正常的。文本也可以改变。就是图片SRC地址虽然改变了,但图片组件并未刷新。


更多关于uni-app APP和H5平台image组件SRC数据修改后无法刷新图片的实战教程也可以访问 https://www.itying.com/category-93-b0.html

19 回复

使用setup也不行。APP和H5中都无法修改data的变量值。什么情况? 用A版HBX也不行。 调试新值已改变,但是数据无变化。

更多关于uni-app APP和H5平台image组件SRC数据修改后无法刷新图片的实战教程也可以访问 https://www.itying.com/category-93-b0.html


测试文本数据可以刷新。小程序中图片src改变后图片组件也能自动刷新。 只有APP和H5中图片更新后不会刷新。首次赋值正常。 图片是网络地址

请提供下测试工程

之前的老项目了,也是用VUE3写的。提供太麻烦了,还有很多模块要剔除。不行我再看看吧。反正小程序是正常的。新建的项目未测试。

宽设置720,高设置100%,或高设置auto时,都无法显示图片,如果不设置auto,图片就变形。 小程序中正常。 外层用的CSS样式relative 图片组件未使用其它绝对或悬浮样式。 内置浏览器也没事。谷歌浏览器出现问题。APP出现问题。

data的bg设置为空字符串
打印下面的that.bg
在上面的image加v-if=“bg”

这个也不行。以前没毛病,这次大更新完才发现有这个问题。

如果想高度自适应就在image加mode=“widthFix”,如果想宽度自适应就加mode=“heightFix”,css只需要加对应的宽度或者高度即可,其它元素都不要

主要是我要从服务器上同步部分样式元素数据下来,要是每个元素都加判断是否空才加入也麻烦。

app和h5是做语法验证的,相对小程序比较严格,(小程序其实帮你处理了对应的错误),假设
在页面使用某一个字段,这个字段在data是不存在的,这个时候app和h5就会报错,小程序却不会报错 你这个bg:null就是一个异常数据

查找一下是否有其他地方也更新src字段的值了

没有。正常的。在小程序中是没有问题的。以前的版本在APP上也没问题。这次更新完,发现APP安卓13首次启动,数据加载慢了NN秒,模拟器9上面却很快。

但是之前是没有问题的。 而且我又研究了一下,H5上面现在UNIAPP正在向UNIAPP-X转换,我发现它自动在上层加了background-image做背景图,而下面还有一层是<img,不知道这样做的用意是什么。 另外我在浏览中直接修改样式height:auto,图片没有问题。 但是我在元素中动态修改样式,样式从服务器上同步下来的auto,就出现了问题。如下图: <image :src=xxxxxx :style="{width:netWidth,height:netHeight}" 然后POST从后台出来的数据,把netHeight变成auto,在H5和APP中显示就不显示图片了。
PS: 还有一个情况就是,新版本更新后,APP首次启动慢了N倍。。。安卓13真机测试是这样,测试多个品牌的手机都出现了这个问题。而以前打包的没有这个问题,且安卓模拟器9上面也很快。

<image>组件高度设置为auto就会塌陷为0,一直有这个问题,你把image的mode设置成widthFix不就行了

你确定你的图片地址是对的吗?我这边测试了一下是可以正常展示的,有没有可能是跨域的问题?H5有相关报错的字眼吗?控制台里有没有报错什么的 <template>
<view class="main">
<image :src="src" mode=""></image>

</view>
</template>

<script> export default { data() { return { num: 1, src: '' } }, onLoad() { setTimeout(() => { this.src = '../../static/logo.png'; }, 10000) } } </script>

个别的有这个问题。去年创建的项目,图片地址绝对正确,就是动态更换换不了。小程序中就正常。其它的我再看看吧。

动态更新后,打印出来的图片地址是正常的吗

回复 HRK_01: 是的。就是我那个去年做的项目有问题,小程序里就是正常的,到APP和H5上就没问题,算了,我新建了项目。

uni-app 开发中,当你修改 image 组件的 src 属性后,图片没有刷新,可能是由于以下几个原因导致的。下面是一些可能的原因和解决方案:

1. 缓存问题

浏览器或APP可能会缓存图片,导致即使 src 改变了,图片也没有刷新。

解决方案:

  • src 后面添加一个随机参数,以强制刷新图片。例如:
    <image :src="imageUrl + '?timestamp=' + Date.now()" />
    
    每次 imageUrl 改变时,Date.now() 会生成一个新的时间戳,从而强制浏览器重新加载图片。

2. 数据绑定问题

确保 imageUrl 的值确实发生了变化,并且 Vue 的响应式系统能够检测到这个变化。

解决方案:

  • 确保 imageUrl 是通过 Vue 的响应式系统更新的。例如:
    this.imageUrl = newImageUrl;
    
    如果你直接修改了数组或对象的某个属性,可能不会触发视图更新。可以使用 Vue.set 来确保属性是响应式的。

3. 图片路径问题

确保 imageUrl 是一个有效的路径,并且路径指向的图片确实存在。

解决方案:

  • 检查 imageUrl 的值,确保它是一个有效的URL或路径。如果是相对路径,确保路径是相对于当前页面的。

4. 平台差异

uni-app 在不同平台(如APP、H5)上可能存在一些差异,特别是在处理图片加载时。

解决方案:

  • 确保在不同平台上测试代码,检查是否存在平台差异。如果有,可能需要针对不同平台编写不同的代码逻辑。

5. 异步加载问题

如果 imageUrl 是通过异步请求获取的,可能在图片加载完成之前,image 组件已经渲染了。

解决方案:

  • 确保在图片URL获取完成后再进行渲染。可以使用 v-if 来控制 image 组件的显示:
    <image v-if="imageUrl" :src="imageUrl" />
    

6. 图片格式问题

确保图片格式是支持的格式,如 jpgpnggif 等。

解决方案:

  • 检查图片格式,确保它是支持的格式。如果图片格式不正确,可能会导致图片无法加载。

7. 网络问题

如果图片是通过网络加载的,确保网络连接正常,并且图片服务器是可访问的。

解决方案:

  • 检查网络连接,确保图片服务器可访问。如果有必要,可以在控制台中查看网络请求,检查是否有错误。

示例代码

以下是一个示例代码,展示了如何通过添加时间戳来强制刷新图片:

<template>
  <view>
    <image :src="imageUrl + '?timestamp=' + timestamp" />
    <button @click="changeImage">Change Image</button>
  </view>
</template>

<script>
export default {
  data() {
    return {
      imageUrl: 'https://example.com/image1.jpg',
      timestamp: Date.now()
    };
  },
  methods: {
    changeImage() {
      this.imageUrl = 'https://example.com/image2.jpg';
      this.timestamp = Date.now(); // 更新时间戳,强制刷新图片
    }
  }
};
</script>
回到顶部