遇到的问题:明明已经清空数据了,进度条清空成功,并且文件log出来都表示已经清空了,但是再次打开弹窗的时候还是有数据显示。
上传成功之后,再次打开dialog还是会显示文件标题:
解决办法:使用Date.now()
原理说明:ElUpload
是一个 Vue 组件,它在重新渲染时会根据 key
属性来判断是否需要重建组件实例。当你改变 key
的值时,Vue 会销毁旧的组件实例并创建一个新的组件实例,这就等同于“重置”了组件的状态。
为什么使用 Date.now()
?
-
生成唯一的值: 每次调用
Date.now()
都会返回一个当前的时间戳,这个值是唯一的,因此可以确保每次更新uploadKey
的值都不一样。 -
强制重渲染: 当
uploadKey
改变时,Vue 会检测到ElUpload
组件的key
发生变化,进而销毁并重新创建这个组件,确保组件的所有状态(如上传的文件)都被清空。 -
简单易用:
Date.now()
的调用简洁、无副作用,适合用来生成需要频繁更新的唯一值。
使用date.now之后再不刷新页面的情况下,再次打开弹框就不会出现任何数据
代码:
<el-upload :key="uploadKey" ...>
<!-- 你的上传按钮内容 -->
</el-upload>
-----------------------分割线---------------
const uploadKey = ref(Date.now());
const clearFormData = () => {
uploadKey.value = Date.now(); // 强制重新渲染 ElUpload
formData.filename = ""; // 清空文件名
uploadProgress.value = 0; // 重置进度条
};
const closeDialog = () => {
dialogVisible.value = false;
clearFormData(); // 调用清空数据的方法
};