vuejs 2组件base64图像未更新

时间:2017-04-04 17:56:11

标签: javascript laravel vue.js vuejs2 vue-component

我想要实现的目标:
从jwt令牌保护源加载图像
服务器将图像作为base64字符串返回,我将在图像

上加载此字符串作为背景URL

父组件:

<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组件

<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>

现在,如果我从form.photos数组中删除照片(拼接),则最后删除最后一张图片。 当我删除绿色图像

蓝色图像消失

当我检查form.photos数组时,删除了正确的图像,只有myImage组件的img数据属性仍然是前一个数组位置1的旧值。

我能够通过在照片道具上添加一个手表并重新获取base64字符串来绕过这个问题,这会导致每个图像的新请求

watch: {
   photo: function (val) {
      this.imgurl()
   }
},

有没有办法删除数组项(子组件)并显示正确的结果而不在子组件中再次获取所有图像?

感谢

1 个答案:

答案 0 :(得分:5)

试试这个。

<myImage v-for="photo in form.photos" :key="photo.id" :photo="photo" @delphoto="deleteImage"></myImage>

来自当前的documentation

  

在2.2.0+中,当对组件使用v-for时,现在需要一个键。