我试图绑定元素中图像的src,但似乎不起作用。我得到了一个"无效表达式。生成的函数体:{backgroundImage: {url(image)} "。
文档中说要使用“短横线”或“驼峰式”。
<div class="circular" v-bind:style="{ backgroundImage: { url(image) }"></div>
这是一个样例代码:https://jsfiddle.net/0dw9923f/2/
我试图绑定元素中图像的src,但似乎不起作用。我得到了一个"无效表达式。生成的函数体:{backgroundImage: {url(image)} "。
文档中说要使用“短横线”或“驼峰式”。
<div class="circular" v-bind:style="{ backgroundImage: { url(image) }"></div>
这是一个样例代码:https://jsfiddle.net/0dw9923f/2/
问题在于 backgroundImage
的值需要像这样的字符串:
<div class="circular" v-bind:style="{ backgroundImage: 'url(' + image + ')' }"></div>
这是一个简化版的示例,它可以正常工作:https://jsfiddle.net/89af0se9/1/
关于kebab-case的评论,以下是如何实现:
<div class="circular" v-bind:style="{ 'background-image': 'url(' + image + ')' }"></div>
换句话说,v-bind:style
的值只是一个普通的 JavaScript 对象,并遵循相同的规则。
更新:关于为什么您可能会在此处遇到麻烦,还有一点需要注意。
您应该确保您的 image
值被引用,以便最终生成的字符串是:
url('some/url/path/to/image.jpeg')
否则,如果您的图片URL中包含特殊字符(如空格或括号),则浏览器可能无法正确应用它。在JavaScript中,赋值看起来像这样:this.image = "'some/url/path/to/image.jpeg'"
或者this.image = "'" + myUrl + "'"
在技术上,这可以在模板中完成,但为了保持有效的HTML而需要进行的转义工作是不值得的。
更多信息请参见:是否必须对url()的值进行引用?
<div :style="{'background-image': 'url(' + require('./assets/media/img.jpg') + ')'}"></div>
另一种解决方案:
<template>
<div :style="cssProps"></div>
</template>
<script>
export default {
data() {
return {
cssProps: {
backgroundImage: `url(${require('@/assets/path/to/your/img.jpg')})`
}
}
}
}
</script>
这个解决方案的更大优点是什么? 首先,它更加清晰。如果您正在使用Vue CLI(我假设您在使用),那么您可以使用webpack加载它。
注意:不要忘记 require()
始终相对于当前文件的路径。
<div :style="{ backgroundImage: `url(${post.image})` }">
有多种方法,但我发现模板字符串简单易懂。
我在这篇帖子中搜索,但没有人发布带有动态文件名的require
,这就是为什么我要发布它的原因。
我搜索了这篇帖子,但没看到任何使用动态文件名的require
的帖子,所以我来发一个。
:style="{ backgroundImage: `url(${require('@/assets/' + banner.image)})` }"
我尝试了@david的答案,但并没有解决我的问题。经过很多麻烦,我编写了一个方法并返回带有样式字符串的图像。
HTML 代码
<div v-for="slide in loadSliderImages" :key="slide.id">
<div v-else :style="bannerBgImage(slide.banner)"></div>
</div>
方法
bannerBgImage(image){
return `background-image: url(${image})`;
},
<div class="img-section" :style=img_section_style >
computed: {
img_section_style: function(){
var bgImg= this.post_data.fet_img
return {
"color": "red",
"border" : "5px solid ",
"background": 'url('+bgImg+')'
}
},
}
尝试使用encodeURI()
我遇到的问题是由于URL中存在特殊字符和/或空格引起的。
所以我不得不将这个:
:style="{ backgroundImage : 'url(' + item.media.url + ')' }"
更改为这个:
:style="{ backgroundImage : 'url(' + encodeURI(item.media.url) + ')' }"
对我来说,接受的答案似乎没有解决我的问题,但是这个方法解决了
确保你的backgroundImage声明被包含在url(和引号中,这样样式才能正确地工作,无论文件名是什么。
ES2015样式:
<div :style="{ backgroundImage: `url('${image}')` }"></div>
不使用ES2015:
<div :style="{ backgroundImage: 'url(\'' + image + '\')' }"></div>
Source: vuejs/vue-loader issue #646
我使用了VUE选项(~@/)
我定义了一个类
<template>
<v-container class="bgExampleClass" fuild>
<!-- Content-->
</v-container>
</template>
<script></script>
<style>
.bgExampleClass{
background-image: url('~@/assets/imgs/backgroundExample.jpg');
}
</style>
background-image
),但现在必须使用驼峰式命名法(backgroundImage
)。请注意,这不改变原意。 - andrewtweberbackgroundImage: image
而不是backgroundImage: 'url('+image+')'
。我太过关注Vue的语法,忘记了url()
。 - bendytreev-bind:style="{ 'background-image': url(image) }"
就可以了,但是在组件外部(普通页面上)似乎需要将url放在引号中。有人知道为什么吗? - Keara