【发布时间】:2018-09-14 10:21:49
【问题描述】:
我正在构建一个可以使用 vue.js 一次上传多个图像的应用程序。在文件输入的@change 事件中(当我选择要上传的文件时),我想要一个预览和所选图像的名称,然后是一个取消单个文件的按钮。一切正常。但是,当我尝试使用按钮取消任何图像时,只有名称被删除,图像仍然存在。有人可以指导我纠正我做错了什么。问题似乎与我的cancelImage 方法有关。
我的模板:
<div class="form-group">
<textarea name="body" class="form-control" v-model="body"></textarea>
</div>
<div class="form-group">
<label class="control-label">Files
<input type="file" ref="files" accept="image/*" multiple="multiple" @change="selectFiles">
</label>
</div>
<div v-for="(file, key) in files">
<img class="preview" v-bind:ref="'image' +parseInt( key )" />
 {{ file.name }}
<button type="button" class="btn btn-danger" @click.prevent="cancelImage(file, key)"> X </button>
</div>
<div class="form-group">
<button @click.prevent="addFiles" class="btn btn-default">Add Files</button>
</div>
<div class="form-group">
<button type="button" class="btn btn-primary btn-block" @click.prevent="upload">Upload</button>
</div>
然后是我的脚本:
export default {
data(){
return {
body: '',
files: [],
form: new FormData()
}
},
methods: {
uploadFiles(e){
let selectedFiles = e.target.files;
let vm = this;
for (let i=0; i < selectedFiles.length; i++){
vm.files.push(selectedFiles[i]);
}
this.imagePreview();
console.log(this.files)
},
imagePreview(){
let vm = this;
for (let i=0; i<vm.files.length; i++){
let reader = new FileReader();
reader.addEventListener('load', function(){
vm.$refs['image' + parseInt( i )][0].src = reader.result;
}.bind(vm), false);
reader.readAsDataURL(vm.files[i]);
}
},
addFiles(){
this.$refs.files.click();
},
cancelImage(file){
let index = this.files.indexOf(file);
this.files.splice(index, 1);
}
}
}
【问题讨论】:
-
尝试在使用
v-for的地方添加key。<div v-for="(item, key) in items" :key="key"/>
标签: javascript vue.js