javascript - 将输入类型文件渲染为Vue组件中的列表
问题描述
我创建了一个组件来添加多个带有标题的文档和一个删除按钮来删除一个文档。我在文档变量上使用了数据绑定。一切正常,但删除的文件字段无法正常工作。假设用户添加了三行。
A | a.pdf | Delete
B | b.pdf | Delete
C | c.pdf | Delete
当第二行被删除结果应该是
A | a.pdf | Delete
C | c.pdf | Delete
但结果是
A | a.pdf | Delete
C | b.pdf | Delete
注意 C 行有 b.pdf 而不是 c.pdf。
这是我的组件代码:
<template>
<div>
<div v-for="(document, index) in documents" class="row" :key="index">
<fieldset>
<div class="form-group">
<label>Title</label>
<input type="text" :name="`document[${index}][title]`" v-model="document.name" pattern="[A-Za-z\s0-9]+" required/>
</div>
<div>
<input type="file" :name="`document[${index}][file]`" class="form-control document-file" />
</div>
<div>
<button @click="deletedoc(index)"> Delete </button>
</div>
</fieldset>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group pull-right mt-10">
<button class="btn btn-info btn-sm" @click.prevent.stop="documents.push({active: 1})">
Add Document
</button>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
props: {
list: {
type: Array,
default: function() {
return []
}
}
},
data() {
return {
documents: [],
};
},
mounted() {
this.documents = this.list;
},
beforeUpdate(){
console.log(this.documents);
},
methods: {
deletedoc(index){
console.log(index);
this.documents.splice(index, 1)
},
showConfirm(index) {
if (this.documents[index].id !== undefined) {
this.$set(this.documents[index], 'confirm', true);
} else {
this.documents.splice(index, 1);
}
}
}
};
</script>
<style>
fieldset{display: flex; margin-bottom: 20px;}
</style>
编辑1:
沙盒链接 https://codesandbox.io/s/dreamy-breeze-msv4n?file=/src/components/HelloWorld.vue
解决方案
推荐阅读
- vb.net - Show First 10 Highest/Lower value in my Line Textbox
- ios - 如何在每次点击更新的条件下禁用特定 CollectionViewCell 的用户交互
- react-native - 条目,“:CFBundleIdentifier”,在新的反应原生项目中不存在
- ms-access - 使用IF查看多个字段返回一个设定值
- html - 如何处理来自 oauth2 令牌请求的 html 响应?
- google-sheets - 谷歌表格脚本从 YouTube API 中提取数据,无法获取频道 ID
- python - 如何在 for 循环 if 语句中处理“SettingWithCopyWarning”
- javascript - 保存文件后如何将用户重定向到另一个网页?
- node.js - 即使我将内容类型放在标题中,请求也会返回无效或不存在的内容类型
- spring - spring cloud stream文件源码app - 子目录下已处理文件和轮询文件的历史