Objective个
我想将图像的path作为props 传递给组件.我希望组件使用props 来动态生成背景图像.
我的所有图像都在Vue src文件夹中的Assets文件夹中. 路径看起来像'@/assets/images/subject/computers.jpeg'
Problem个
未显示任何背景图像
以下是页面上呈现的内容:
然而,什么也没有显示出来
Strange Behaviour个
出于某种原因,在CSS中添加完全相同的路径名'@/assets/images/subject/computers.jpeg'是可行的(将其添加到<;style>;标记中).如果它是V-BIND内联风格,它就不起作用.
下面是它在我的css中的样子
然而,这样做的问题是它不是动态呈现的CSS.
我进一步判断了这个元素,发现了一些奇怪的行为.如您所见,内联样式将图像路径读取为'@/assets/images/subject/computers.jpeg'(下图中的element.style).
而在css中添加路径时,会将'@/assets/images/subject/computers.jpeg'更改为'http://localhost:8080/img/computers.7f3748eb.jpeg',从而正确呈现背景图像.
Question个
我想我的问题有两个方面:
- 如何使用props 在Vue中动态渲染背景图像?或者,有没有更好的方法来做到这一点?
- 为什么绑定内联样式不解析路径(继续使用‘@’),而直接将其添加到<;脚本>;标记中可以解析路径?
Solution个
好的,非常感谢100&101帮助我思考这件事.
我能够使用如下所示的计算(computed)属性解决此问题:
const imgSrc = computed(() => require(`@/assets/images/subject/${props.subject.image}`))
由于VueLoader(Vue中的默认设置)解析路径的方式,我无法将‘@’路径存储在props 本身中.相反,props 只是图像/文件名(ex. "computers.jpeg"),而带有Required()的Computed属性负责解析图像的前置路径.
然后,我将计算(computed)属性添加到绑定内联样式中,如下所示:
<div class="subject-wrapper" v-bind:style="{ backgroundImage: `url('${imgSrc}')` }">
瞧啊!它终于奏效了.
TLDR个
将图像/文件名作为props 传递100,并在计算(computed)属性中使用Require()为路径添加前缀.
干杯????