javascript - Vue + axios 在值更改时不更新 DOM
问题描述
我有上传文件的循环
this.fileUpload.filter((file) => !file.error)
.map((file, index_file) => {
var formData = new FormData();
formData.append("folderID", id);
formData.append("folderName", name);
formData.append("type", type);
formData.append(`content`, file);
fileService
.uploadfiles(
formData,
(event) => {
file.status = "uploading";
file.uploadPercentage =
Math.round((event.loaded * 100) / event.total) * 0.9;
if (file.uploadPercentage == 90) {
file.status = "uploaded";
}
console.log( file.uploadPercentage);
}
)
.then((result) => {
file.uploadPercentage = 100;
file.status = "done";
})
.catch(() => {
file.status = "uploaded";
});
});
ps fileService.uploadfiles 文件用于创建函数调用 axios.post
和 div 用于显示上传
<div v-for="(file, file_index) in fileUpload" :key="`file_preview_${file_index}_${file.name}_${file.status}`">
{{ file.uploadPercentage }}
</div>
我不明白为什么 div 上的百分比不上传,但在控制台中它记录写入文件的百分比。
解决方案
我将 $nextTick 添加到箭头函数中以重新渲染并将 v-if rerenderProgress 添加到模板。
uploadfiles(
formData,
(event) => {
file.status = "uploading";
file.uploadPercentage = Math.round((event.loaded * 100) / event.total) * 0.9;
this.rerenderProgress = false;
this.$nextTick(function () {
this.rerenderProgress = true;
});
// this.$forceUpdate();
if (file.uploadPercentage == 90) {
file.status = "uploaded";
}
},
{ cancelToken }
)
推荐阅读
- python - 将值存储在列表 Python 中
- c# - C#、ASP.NET MVC、实体框架:无法获取对象字符串值
- c# - 每次调用 End Game 函数时,如何将数字添加到变量中?
- python-2.7 - ElasticSearch:使用 Simple_Query_String 忽略多个对象的过滤器
- python - 如何在蛇游戏中编程障碍物?(Python 3 和 Turtle 图形)
- python - Python random.choice 总是选择第一个值
- java - 为每个创建的类调用构造函数
- python - 索引超出范围错误
- python - Python:如何组织属性(常量)?
- javascript - DateRangePicker cancelBtn 重复项重定向到同一页面