javascript - splice 总是删除 Vue.js 中的最后一项
问题描述
我敢肯定问题很简单,但我有几个小时的堆栈。
我创建了一个可以添加或删除以上传文件的应用程序。
当我单击删除按钮时,它总是删除最后的项目。我试图通过添加来解决它:key="key"
,但它没有任何改变。
我的代码可能有什么问题?这是代码笔: https ://codepen.io/shanyulin/pen/RwaWaZy?editors=1010
HTML
<div id="app">
<div class="form-group clearfix" v-for="(event, key) in events" v-bind:key="key">
<input name="attachment[]" accept="image/png, image/jpeg, application/pdf" type="file" class="form-control form-control-lg">
<button @click="deleteEvent(key)" class="btn btn-danger">x</button>
</div>
<button @click="addEvent" class="btn btn-dark">+</button>
</div>
JS
const app = new Vue({
el: '#app',
data() {
return {
events: [{}],
}
},
methods: {
addEvent: function() {
let quantity = this.events.length;
if (quantity < 6) {
this.events.push({
index: ''
});
} else {
return false;
}
},
deleteEvent: function(key) {
let quantity = this.events.length;
if (quantity == 1) {
alert("Please upload at least one file.");
}
if (quantity > 1) {
const confirmed = confirm("Do you really want to delete?");
if (confirmed) {
this.events.splice(key, 1);
}
}
}
},
});
解决方案
数组索引对于key
. 如果您有一个包含三个元素的数组,则键是0,1,2
. 当您删除第二个时,键是0,1
,而不是0,2
。
您需要为每个元素提供唯一键。
const app = new Vue({
el: '#app',
data() {
return {
events: [{}],
uniqueKey: 0,
}
},
methods: {
addEvent: function() {
let quantity = this.events.length;
if (quantity < 6) {
this.events.push({
index: '',
key: this.uniqueKey++
});
} else {
return false;
}
},
deleteEvent: function(key) {
let quantity = this.events.length;
if (quantity == 1) {
alert("Please upload at least one file.");
}
if (quantity > 1) {
const confirmed = confirm("Do you really want to delete?");
if (confirmed) {
this.events.splice(key, 1);
}
}
}
},
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<div class="form-group clearfix" v-for="(event, key) in events" v-bind:key="event.key">
<input name="attachment[]" accept="image/png, image/jpeg, application/pdf" type="file" class="form-control form-control-lg">
<button @click="deleteEvent(key)" class="btn btn-danger">x</button>
</div>
<button @click="addEvent" class="btn btn-dark">+</button>
</div>
推荐阅读
- swift - 如何将米和厘米转换为英尺和英寸并在 UILabel 上显示
- php - 未知的“usort() 期望参数 1 是数组,给定 null”错误
- sql - Find values in between two characters '(' and ')' in column that have nulls
- tfs - 无法验证集合
- java - 如何从文件中获取相对路径
- javascript - 从名为的 DB.ALL 获取返回
- service-worker - 在 lastChance boolean 为 true 后,workbox backgroundSync 队列中的请求会发生什么?
- three.js - 改变球体位置后球体物体变形
- javascript - 如何在同一页面上使用两次基于 ID 的 html5 画布
- python - 从列表中的字符串创建变量