14

I am referencing an image url in a vue component like

<img alt="Vue logo" src="~statics/reports/logo.png">

this works

but while trying

<img alt="Vue logo" :src="getURL()">


data() {
    return { imgPath: "~statics/reports/logo.png" };
  },

  methods: {

    getURL() {
        // 

      // console.log(path)
      return (this.imgPath)
    }
  },

it fails

My folder structure is enter image description here

In the first case the path is resolved to

http://localhost:8081/img/logo.82b9c7a5.png

and served automatically by the dev server

The path is not resolved in the second case it remains http://localhost:8081/~statics/reports/logo.png

I am using vue cli 3 generated default config for webpack .

I do not want to use relative paths for all images like ../images/ as it makes it more verbose. I have tried require(pathVariable) that too does not work Please help with resolving the img path when the url is dynamic ie asset name comes from server and i append a path in a method or computed and use :src dynamicbinding to serve it

2 Answers 2

29

The second way fails because "~" try to get this asset from node_modules. You can read more about handling assets here: https://cli.vuejs.org/guide/html-and-static-assets.html#relative-path-imports.

To fix it just use require like below:

data() {
  return {
    imgPath: require('@/statics/logo.png')
  }
}

..or directly in template:

<img alt="Vue logo" :src="require('@/statics/logo.png')">
Sign up to request clarification or add additional context in comments.

3 Comments

I get Uncaught (in promise) ReferenceError: require is not defined. Do I need to configure something first in order to make this work?
If you are using Vite then require won't work @Fred
Ah, I got confused about Vue 3 and vue-cli 3 (which creates Vue 2 code) again. Thanks for the heads up!
0

For Vue 3 projects you can use the following:

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

2 Comments

it's relative path. It doesn't answer the question.
it didn't work for me in an computed property. i needed to move it to the data function.

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.