18

I have in my vue webpack script the following:

<script>
  export default {
    data () {
      return {
        repos: [
          {name: 'test1', src: '../assets/logo.png'},
          {name: 'test2', src: '../assets/underscore.png'},
           ...
        ]
      }
    }
  }
</script>

And then in my html, I'm trying to bind the local src element to an img but I can't get it to work. Here is what my html looks like:

<div v-for="repo in repos" :key="repo.name">
  <img :src="repo.src" />
</div>

It works fine when my img source is not data-bound such as this:

<img :src="../assets/logo.png" />

Why won't my local images load if they are data bound in Vue?

Here is what my directory looks like:

enter image description here

8
  • When you inspect the element, what is in src? Commented Feb 18, 2018 at 2:12
  • ../assets/logo.png Commented Feb 18, 2018 at 2:22
  • Is the repo name unique? You show "test" twice here, and you're using it for :key. Commented Feb 18, 2018 at 2:29
  • That was a typo I just fixed. The repo names are unique. I was using an id before but for the sake of brevity in this example I changed it. Commented Feb 18, 2018 at 2:40
  • You should post an answer details how you fixed problem. That way if someone else is stuck, they can get unstuck. Commented Feb 18, 2018 at 2:42

3 Answers 3

30

If you're using vue-cli you have to remember that everything is processed as a module, even images. You'd need to use require if the path is relative in JS, like this:

{ name: 'test1', src: require('../assets/logo.png') }

You can find a lot more details about this here: http://vuejs-templates.github.io/webpack/static.html

Sign up to request clarification or add additional context in comments.

Comments

9

simply for binding img src to data, just require the file address :

<img v-bind:src="require('../image-address/' + image data)" />

example below shows ../assets/logo.png :

<template>
          <img v-bind:src="require('../assets/' + img)" />
</template>

<script>
export default {
  data: function() {
    return {
      img: "logo.png"
    };
  }
};
</script>

Comments

0

Also, vite required a different method to include source file in like a prop.

The most common way is to use following construction :

{ name: 'test1', img: 'new URL(`@/assets/logo.png`, import.meta.url).href' }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.