使用资产变量中的图像 src

Using image src from asset variables

我最近遇到图像问题。一切正常,直到您必须在页面上显示图像列表。

问题在于,当我们直接为带有硬编码字符串的图像提供 src 时,它会与 url 一起工作,例如 ~/assets/any-image.png。但是如果我尝试将 url 移动到任何变量/对象/数组中,我必须指定包含 URL.

:src="myVariable"

代码举例:

<template>
  <div>
    Problem with images
    <img :src="image.url" alt="">
    <img :src='require(image.url)' alt="">
  </div>
</template>

<script>
export default {
  data () {
    return {
      image:
        {
          url: '~/assets/icon.png',
          type: 'asset'
        }
    }
  }

}
</script>

在这里,我尝试使用带有 ~@ 的资产,也尝试使用和不使用斜线。当然图像存在于资产文件夹中,但由于 src url 是通过任何变量(不是直接)提供的,资产 url 未提供,因此图像 url 看起来像服务器上不存在的 host:port/~/assets/...

在这个例子中,我想用包含 url 及其类型 (asset/static) 的对象替换图像 url 并检查是否为资产类型,然后使用 require(variable) 但出现 "Cannot find module '~/assets/icon.png'"

的问题

有人解决过这个问题吗?

绑定到资产变量图像时需要使用require。例如:

<img :src="url">
url: require('@/assets/icon.png')

如果您的 json 只包含文件名,您可以将 require 放在模板中:

<img :src="require('@/assets/' + url)">
url: 'icon.png'

感谢Dan with his 我有一个通用的最终解决方案: 图片包含 link 并输入:

image: {
  url: '/any-asset-folder/image.png'
  type: 'asset'
}

然后用三元运算符结果是

<img
  :src="image.type === 'asset' 
    ? require('@/assets'+image.url) 
    : image.url"
>

通过这种方式,无论图像来自资产、静态还是外部,我都能正常工作:)