Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to bind img src to data in Vue

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

like image 470
rockzombie2 Avatar asked Feb 18 '18 01:02

rockzombie2


People also ask

What is data () in Vue JS?

The Node. js provides a Vue. js data() method to the user. Basically in vue. js data() we defined collection of logic and stored in component using vue.

What does binding mean in Vue?

The v-bind directive is a Vuejs directive used to bind one or more attributes, or a component prop to an element. If that attribute is binded to our data defined in Vuejs instance then dynamically changes can be observed as data changes.


2 Answers

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

like image 155
Bill Criswell Avatar answered Sep 27 '22 20:09

Bill Criswell


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>
like image 20
sina Avatar answered Sep 27 '22 20:09

sina