【发布时间】:2019-03-02 19:19:45
【问题描述】:
我需要将 id 参数传递给我的组件并调用它的更新(重新渲染 -> 无需重新加载页面)
我有一个带有头像加载方法的组件
settings.vue
<template>
... download form and button with onUploadImg method
</template>
<script>
methods: {
onUploadImg() {
if(this.avatarFile == null) return;
var formData = new FormData();
formData.append("file", this.avatarFile);
axios.post('urlForPost',
formData,
{
headers: {
'Content-Type': 'multipart/form-data'
}
})
.then(response => {
//response Ok, show message and reload img on this page
this.$nextTick(() => {
//Need send new FileId from image to MyVueAvatar.vue and update him
localStorage.setItem('picture', response.data); //can be through local storage?
})
})
.catch(error => {
console.log(error);
});
}
}
</script>
OrderContainer.vue
<template>
<my-vue-avatar class="img-avatar" :id="this.avatarPicId"></my-vue-avatar>
....
</template>
<script>
import MyVueAvatar from '../Avatar'
....
</script>
MyVueAvatar.vue(如果有新头像上传到settings.vue,需要更新这个组件)
<template>
<div>
<img :src="`data:image/png;base64, ${file}`" class="img-avatar" style="height: 35px;" />
</div>
</template>
<script>
import axios from 'axios'
export default {
props: {
id: null
},
data: () => {
return {
file: null
}
},
created() {
this.onGetImage(this.id);
},
methods: {
onGetImage(id) {
if (id == null) return;
axios.defaults.headers.common['Authorization'] = 'Bearer ' + localStorage.getItem('jwt');
axios.get('url/File/Get/' + id,
{
responseType: 'arraybuffer'
})
.then(r =>
{
var buffer = new Buffer(r.data, 'binary').toString('base64');
this.file = buffer;
})
.catch(error => {
console.log(error);
});
}
}
}
</script>
如何做到这一点?
【问题讨论】:
-
settings.vue 的父组件是谁?
-
每次更改 prop
id时是否需要调用onGetImage(id)? -
是的,每次
id改变时我都需要打电话
标签: javascript node.js vue.js