css - 将 Assets 图像路径作为动态内联样式背景图像 url (Nuxt.js)

标签 css vue.js webpack assets nuxt.js

我正在开发 Nuxt.js 应用程序,我想使用 Assets 文件夹中的图像动态设置元素的背景图像,这就是我所做的:

<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 不会触及它们。

要解决此问题,请在元素的根目录下创建一个“静态”目录(假设您还没有)。在其中,创建一个“images”目录。当构建运行时,Webpack 会将 static 中的所有内容复制到 dist 文件夹。

在您的组件中使用这些图像的路径是 /images/filename.ext

关于css - 将 Assets 图像路径作为动态内联样式背景图像 url (Nuxt.js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57695474/

相关文章:

java - 找不到 vaadin css 文件

具有 100% 宽度但 TD 不断增长的 Html 表格?

javascript - 单元测试依赖全局事件总线的 Vue 组件

javascript - bundle.js 未在文件编辑时更新

html - 为什么这些列表元素没有出现在一行中?

javascript - Laravel 搜索时获取关系数据

twitter-bootstrap - Vue2 组件不显示 Bootstrap 下拉菜单

node.js - 此实验性语法需要启用解析器插件 : 'objectRestSpread'

javascript - 我可以在 webpack 中构建 sass/less/css 而不需要在我的 JS 中使用它们吗?

jquery - 如何更改伪类属性?