将资产图像路径作为动态内联样式背景图像传递 url (Nuxt.js)
Pass assets image path as dynamic inline style background-image url (Nuxt.js)
我正在开发 Nuxt.js 应用程序,我想使用资产文件夹中的图像动态设置元素的背景图像,这就是我所做的:
<template>
<div>
<div
v-for="(image, imageID) in images"
:key="imageID"
:style="bgImg(image)"
/>
</div>
</template>
<script>
export default {
data() {
return {
images: [
'~assets/img/image1.jpg',
'~assets/img/image2.jpg',
'~assets/img/image3.jpg',
'~assets/img/image4.jpg'
]
}
},
methods: {
bgImg(img) {
return `background-image: url(${img})`
}
}
}
</script>
预期行为
div 使用动态背景图像呈现
实际行为
背景图片未渲染。如果我将静态资产路径放入 css 文件,它会呈现
如何传递路径才能正确呈现?
Nuxt Webpack 构建过程与 一些 url
混淆
所以问题是模板中的路径和 CSS 在构建项目时由 Webpack 的文件加载器处理。例如 ~assets/
在构建时被重写为 webpack 处理完成后的实际路径。
但是,由于您将路径字符串指定为 vue.js 数据的一部分,Webpack 不会触及它们。
要解决此问题,请在项目的根目录下创建一个 "static" 目录(假设您还没有)。在其中,创建一个 "images" 目录。当构建为 运行.
时,Webpack 会将 static
中的所有内容复制到 dist
文件夹
然后在您的组件中使用这些图像的路径是 /images/filename.ext
我正在开发 Nuxt.js 应用程序,我想使用资产文件夹中的图像动态设置元素的背景图像,这就是我所做的:
<template>
<div>
<div
v-for="(image, imageID) in images"
:key="imageID"
:style="bgImg(image)"
/>
</div>
</template>
<script>
export default {
data() {
return {
images: [
'~assets/img/image1.jpg',
'~assets/img/image2.jpg',
'~assets/img/image3.jpg',
'~assets/img/image4.jpg'
]
}
},
methods: {
bgImg(img) {
return `background-image: url(${img})`
}
}
}
</script>
预期行为
div 使用动态背景图像呈现
实际行为
背景图片未渲染。如果我将静态资产路径放入 css 文件,它会呈现
如何传递路径才能正确呈现?
Nuxt Webpack 构建过程与 一些 url
混淆所以问题是模板中的路径和 CSS 在构建项目时由 Webpack 的文件加载器处理。例如 ~assets/
在构建时被重写为 webpack 处理完成后的实际路径。
但是,由于您将路径字符串指定为 vue.js 数据的一部分,Webpack 不会触及它们。
要解决此问题,请在项目的根目录下创建一个 "static" 目录(假设您还没有)。在其中,创建一个 "images" 目录。当构建为 运行.
时,Webpack 会将static
中的所有内容复制到 dist
文件夹
然后在您的组件中使用这些图像的路径是 /images/filename.ext