javascript - 在 Chrome/Safari 中删除和重新添加元素不会使用 Vue 更新数组
问题描述
我有一个文件上传组件,我可以在其中删除选定的文件,我尝试了this.files.splice(index, 1);
两者this.$delete(this.files, index);
如果我用 重新添加已删除的文件this.files = [...this.$refs.fileUpload.files];
,则不会将其添加到 files 数组中。如果我选择一个不同的文件,它会显示出来,所以我猜这是一个反应性问题。
简化组件:
<template>
<div class="file-upload-component">
<div
class="upload-area"
>
<label for="fileUpload" class="component-info">
<span>Add files</span>
</label>
<input
type="file"
style="display:none"
@change="addFiles"
ref="fileUpload"
id="fileUpload"
/>
<div class="file-list">
<div class="file-list__file" v-for="(file, index) in files" :key="index">
<span>{{ file.name }}</span>
<button
@click="remove(index)"
class="cancel"
>
remove
</button>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
files: [],
};
},
methods: {
addFiles() {
this.files = [...this.$refs.fileUpload.files];
},
remove(i) {
this.$delete(this.files, i);
},
},
};
</script>
<style lang="scss" scoped>
.upload-area {
width: 100%;
height: 356px;
.component-info {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.file-list {
margin: 20px;
.cancel {
margin-left: 10px;
}
}
}
</style>
奇怪的是这种方式在 Firefox 中有效。
解决方案
我通过添加this.$refs.fileUpload.value = null;
after解决了我的问题this.$delete(this.files, i);
。这样,仍然在文件上传输入上的文件将被重置。
推荐阅读
- javascript - js xml响应返回未定义
- c# - 如何使用 C# 在 Discord 中创建用户欢迎消息
- elixir - 无法在 postgresql 10 中打开 Citext 的扩展控制文件
- amazon-web-services - 无法从 Amazon S3 获取数据到 EC2 进行训练
- java - Kubernetes Watch - 如何更新?(Java API)
- sql - 拉拉维尔 | 多态关系未知列
- c# - 将 ConsoleLogger 消息绑定到 TextBox
- swift - 未捕获的异常“NSInvalidArgumentException”,原因:“-[SubResultComponent setDate:]:无法识别的选择器发送到实例 0x60000046b640”
- javascript - 如果存在,请单击按钮,否则单击 puppeteer 中的其他按钮
- c++ - GLSL 正常颜色