vue需要动态图片

Thé*_*aux 2 javascript vue.js nuxt.js

我创建了这个 Vue 组件并向其传递了一个图标路径。

<CTA type="primary" icon="~/assets/phone/img/icons/share.svg" icon-alt="share">
  Primary CTA
</CTA>
Run Code Online (Sandbox Code Playgroud)

我的设置方法返回以下内容

setup(props) {
  return {
   ctaIcon: props.icon,
  }
},
Run Code Online (Sandbox Code Playgroud)

所以ctaIcon等于~/assets/phone/img/icons/share.svg.

ctaIcon当我尝试在模板中使用时,这有效

<img :src="require('~/assets/phone/img/icons/share.svg')" />
Run Code Online (Sandbox Code Playgroud)

但这不起作用

<img :src="require(ctaIcon)" />
Run Code Online (Sandbox Code Playgroud)

我收到以下错误Cannot find module '~/assets/phone/img/icons/share.svg'

如何让它正常工作?

Sal*_*'sa 7

您可以使用 acomputed property来校准 asset 的 url,如下所示:

<script>
export default {
  props: ["ctaIcon"],
  computed: {
    mIconURL() {
      return require(`~/assets/icons/${this.ctaIcon}.png`);
    }
  }
};
</script>
Run Code Online (Sandbox Code Playgroud)

然后在代码中您可以直接使用计算属性作为变量:

<img :src="mIconURL" />

如果您有多个需要解析其路径的图标,您甚至可以创建一个以图标名称作为参数的methoda 而不是a 。computed property然后可以将图标名称从标记级别动态传递给方法,如下所示:

<img :src="mIconURL(this.ctaIcon)" />