I'm trying to bind image src dynamically to a URL of the form ../assets/project_screens/image_name.jpg
.
My directory structure looks like:
- src
-- assets
---- project_screens
-- profile
---- ProjectList.vue
-- store
---- profile.js
I know that I need to use webpack's require("path/to/image")
to help webpack build those images, but the path doesn't resolve.
// store/profile.js
projects = [
{
....
},
{
....
img_url: "../assets/project_screens/im1.jpg"
....
}
....
]
// profile/ProjectList.vue
<md-card
class="md-layout-item project-card"
v-for="(project, idx) in projects"
:key="idx"
>
<md-card-media>
<img :src="require(project.img_url)" alt="People" />
</md-card-media>
</md-card>
If I used a URL string instead of dynamically passing the URL string it works. Looked around stack overflow and none of the solutions helped. Am I missing something else ?
I finally figured it out!! Webpack cannot import the file if its name is completely given as a variable like:
require(imageUrl) // doesn't work
This is because it doesn't know the path at compile time if the path is stored in a variable.
But Webpack can detect files to bundle when it is given a string interpolation in require() like:
require(`../assets/profile_screens/${filename}`) // Works
This works because Webpack knows the path "../assets/profile_screens" at compile time so it can include all the files inside the folder.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With