uni-app 如果一个<view>节点使用 :style加插值字符串的方式设置背景图片,且包含<scroll-view>节点时,控制台会报错
uni-app 如果一个<view>节点使用 :style加插值字符串的方式设置背景图片,且包含<scroll-view>节点时,控制台会报错
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | win10 | HBuilderX |
| 3.3.2 | ||
| 1.05.2112141 | ||
| 2.21.2 |
产品分类:uniapp/小程序/微信
示例代码:
<template>
<view class="page" :style="{backgroundImage: `url(${this.getUrl()})`}">
<!-- 如果添加<scroll-view>节点,控制台报错,不添加,控制台不报错 -->
<scroll-view></scroll-view>
</view>
</template>
<script>
export default {
methods: {
getUrl() {
return "https://avatar.csdnimg.cn/D/7/E/3_qq_37547964_1575443075.jpg"
}
}
}
</script>
<style>
.page {
width: 100vw;
height: 100vh;
}
</style>
操作步骤:
<template>
<view class="page" :style="{backgroundImage: `url(${this.getUrl()})`}">
<!-- 如果添加<scroll-view>节点,控制台报错,不添加,控制台不报错 -->
<scroll-view></scroll-view>
</view>
</template>
<script>
export default {
methods: {
getUrl() {
return "https://avatar.csdnimg.cn/D/7/E/3_qq_37547964_1575443075.jpg"
}
}
}
</script>
<style>
.page {
width: 100vw;
height: 100vh;
}
</style>
预期结果:
- 控制台不报错
实际结果:
- 控制台报错
[渲染层网络层错误] Failed to load local image resource /pages/index/undefined
the server responded with a status of 500 (HTTP/1.1 500 Internal Server Error)
(env: Windows,mp,1.05.2141; lib: 2.21.2)
更多关于uni-app 如果一个<view>节点使用 :style加插值字符串的方式设置背景图片,且包含<scroll-view>节点时,控制台会报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
直接使用微信小程序(不使用 uni-app )测试一下
试下在view上加个v-if=“getUrl()”
更多关于uni-app 如果一个<view>节点使用 :style加插值字符串的方式设置背景图片,且包含<scroll-view>节点时,控制台会报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
··· <view class="page" style="{{'background-image:'+('url('+$root.g0+')')+';'}}"> <scroll-view></scroll-view> </view> ··· 这是编译到微信开发者工具.wxml的格式,如果在微信开发者工具中移除掉 scroll-view,是不会报错的。
在hBuilderX的 view 上加 v-if=“getUrl()”,也不会报错。
其实上面的代码,只是报错,不影响使用,只是我不希望看到报错信息,看着很不爽。
这个问题是由于微信小程序对背景图片URL的解析机制导致的。当<view>节点使用:style绑定背景图片,并且包含<scroll-view>时,微信小程序在解析模板时会尝试预加载背景图片,但此时getUrl()方法可能还未执行或返回的URL未被正确解析。
解决方案:
- 使用计算属性替代方法调用:
computed: {
backgroundStyle() {
return {
backgroundImage: `url(${this.getUrl()})`
}
}
}
模板中改为::style="backgroundStyle"
- 使用静态样式+动态类名:
data() {
return {
bgImage: ''
}
},
mounted() {
this.bgImage = this.getUrl()
}
模板::style="{backgroundImage:url(${bgImage})}"
- 使用行内样式字符串(不推荐,但可临时解决):
<view :style="`background-image: url(${getUrl()})`">

