Создание страницы, которая будет отображать содержимое загруженного файла. Но я не понимаю, почему параметры данных msg
и show
не обновляются, когда они запускаются через @change
. Мне нужно, чтобы оба эти параметра обновлялись только в случае успешной загрузки файла, поэтому я поместил их в функцию onload
lambda:
reader.onload = function(e) {
this.msg = e.target.result;
this.show = true;
console.log(this.msg);
}
Также обратите внимание, что console.log(this.msg)
правильно регистрирует содержимое файла , Так почему же ребенок не получает эти изменения?
Я также попытался установить их с помощью нажатия кнопки, и все работает нормально.
Вот мой код (Приложение. vue) :
<template>
<div id="q-app">
<router-view></router-view>
<input type="file" ref="file" @change="changeViaUpload">
<br><br>
<button @click="changeViaButton">Update data via Button</button>
<hello :show=show :msg=msg></hello>
</div>
</template>
<script>
import hello from '../components/Hello.vue'
export default {
name: "app",
components:{
hello
},
data() {
return {
msg: "",
show: false
};
},
methods: {
changeViaUpload(ev) {
const file = ev.target.files[0];
const reader = new FileReader();
reader.onload = function(e) {
this.msg = e.target.result;
this.show = true;
console.log(this.msg);
};
reader.readAsText(file);
},
changeViaButton() {
this.msg = "Message has been changed via button";
this.show = true;
}
}
};
</script>
А вот и моя Hello.vue
:
<template>
<div v-if="show">
<!-- <div> -->
[Hello.vue] This div will be shown if boolean show is true
<br>
{{ msg }}
</div>
</template>
<script>
export default {
props: ['msg','show'],
data() {
return {
};
},
methods: {
}
};
</script>
Ссылка CodeSandbox
Помогите пожалуйста! Спасибо