148

Web アプリで動的な画像を表示する必要Vue.jsがある場合があります。画像のファイル名が変数に格納されている場所webpackを表示したい。imgその変数はストア変数computedを返すプロパティでありVuex、 で非同期に設定されていますbeforeMount

<div class="col-lg-2" v-for="pic in pics">
   <img v-bind:src="'../assets/' + pic + '.png'" v-bind:alt="pic">
</div>

ただし、次のようにすると完全に機能します。

<img src="../assets/dog.png" alt="dog">

私のケースはこのfiddleに似ていますが、ここでは img URL で動作しますが、実際のファイル パスでは動作しません。

それを行う正しい方法は何ですか?

4

16 に答える 16

133

次のコードでこれを機能させました

  getImgUrl(pet) {
    var images = require.context('../assets/', false, /\.png$/)
    return images('./' + pet + ".png")
  }

そしてHTMLで:

<div class="col-lg-2" v-for="pic in pics">
   <img :src="getImgUrl(pic)" v-bind:alt="pic">
</div>

しかし、以前のアプローチがうまくいかなかった理由はわかりません。

于 2016-11-08T17:30:26.763 に答える
130

以下は、webpack が使用する省略表現です。使用する必要はありませんrequire.context

HTML:

<div class="col-lg-2" v-for="pic in pics">
    <img :src="getImgUrl(pic)" v-bind:alt="pic">
</div>

ビュー方法:

getImgUrl(pic) {
    return require('../assets/'+pic)
}

そして、ここの最初の2つの段落で、これが機能する理由を説明していますか? 良い。

ペットの写真は、他のすべての画像アセットと一緒にロブするのではなく、サブディレクトリ内に配置することをお勧めします。そのようです:./assets/pets/

于 2017-11-24T21:35:54.643 に答える
3

Tried all of the answers here but what worked for me on Vue2 is like this.

<div class="col-lg-2" v-for="pic in pics">
   <img :src="require(`../assets/${pic.imagePath}.png`)" :alt="pic.picName">
</div>
于 2020-12-04T11:14:56.210 に答える
2

私はGridsomeを使用しているので、この方法でうまくいきました。

** toLowerCase() メソッドも使用しました

      <img
        :src="
          require(`@/assets/images/flags/${tournamentData.address.country_name.toLowerCase()}.svg`)
        "
      />
于 2021-08-09T09:28:48.847 に答える
1

私もこの問題に直面しました。

それを試してみてください:

computed {
    getImage () {
        return require(`../assets/images/${imageName}.jpg`) // the module request
    }
}

これを明確にする良い記事は次のとおりです: https://blog.lichter.io/posts/dynamic-images-vue-nuxt/

于 2021-08-16T16:19:50.467 に答える