what i want to achieve:
load an image from jwt token protected source
the server return the image as base64 string and i'll load this string as background url on the image
parent component:
<template lang="html">
<myImage v-for="photo in form.photos" :photo="photo" @delphoto="deleteImage"></myImage>
</template>
export default {
components: {
myImage,
},
data(){
return {
form: {
photos: [
{
id: 1,
thumbnail: "logo1.png"
},
{
id: 2,
thumbnail: "logo2.png"
},
{
id: 3,
thumbnail: "logo3.png"
},
{
id: 4,
thumbnail: "logo4.png"
},
]
},
}
},
methods: {
deleteImage(myphoto)
{
this.form.photos.splice(this.form.photos.indexOf(myphoto), 1);
}
}
}
myImage component
<template>
<div v-if="loaded" class="img">
<img class="albumimg" :style="{ background: img}" :title="title">
<p @click="delimage">delete</p>
</div>
<div v-else class="img">
<img class="loading" style="background: url('/images/spinner.gif')">
</div>
</template>
<script>
export default {
data(){
return {
img: null,
loaded: false
}
},
props: {
photo: {
required: true
},
title: {
default: ''
},
},
created() {
this.imgurl()
},
methods: {
delimage() {
this.$emit('delphoto', this.photo)
},
imgurl() {
this.$http.get("/api/images/" + this.photo.id).then(response => {
this.img = "url('" + response.data + "')"
this.loaded = true
}, response => {
});
},
}
}
</script>
now if i delete a photo (splice) from the form.photos array always the last image get removed. when i remove the green image
when i check the form.photos array, the correct image was removed, only the img data attribute from myImage component is still the old value from the previous array position 1.
i was able to bypass this issue by adding a watch on the photo prop and refetch the base64 string which cause a new get request for every image
watch: {
photo: function (val) {
this.imgurl()
}
},
is there any way to remove an array item (child component) and display the correct result without fetching all images again within the child component?
thanks
Try this.
From the current documentation.