Gij*_*rts 65 javascript vuejs2
我是vue.js(2)的新手,我目前正在开发一个简单的事件应用程序.我已设法添加事件但现在我想基于单击按钮删除事件.
HTML
<div class="list-group">
<div class="list-group-item" v-for="event in events">
<h4 class="list-group-item-heading">
{{ event.name }}
</h4>
<h5>
{{ event.date }}
</h5>
<p class="list-group-item-text" v-if="event.description">{{ event.description }}</p>
<button class="btn btn-xs btn-danger" @click="deleteEvent(event)">Delete</button>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
JS(Vue公司)
new Vue ({
el: '#app',
data: {
events: [
{
id: 1,
name: 'Event 1',
description: 'Just some lorem ipsum',
date: '2015-09-10'
},
{
id: 2,
name: 'Event 2',
description: 'Just another lorem ipsum',
date: '2015-10-02'
}
],
event: { name: '', description: '', date: '' }
},
ready: function() {
},
methods: {
deleteEvent: function(event) {
this.events.splice(this.event);
},
// Adds an event to the existing events array
addEvent: function() {
if(this.event.name) {
this.events.push(this.event);
this.event = { name: '', description: '', date: '' };
}
}
} // end of methods
});
Run Code Online (Sandbox Code Playgroud)
我试图将事件传递给函数,然后用slice函数删除那个,我以为是从数组中删除一些数据的代码.使用simpleb按钮和onclick事件从数组中删除数据的最简洁方法是什么?
Edm*_*ues 109
你splice
以错误的方式使用.
重载是:
方法Array.splice(开始)
array.splice(start,deleteCount)
array.splice(start,deleteCount,item1,item2,...)
"开始"表示要启动的索引,而不是要删除的元素.并且您应该将第二个参数传递deleteCount
为1,这意味着:"我想删除从索引{start}开始的1个元素".
所以你最好选择:
deleteEvent: function(event) {
this.events.splice(this.events.indexOf(event), 1);
}
Run Code Online (Sandbox Code Playgroud)
此外,您正在使用参数,因此您可以直接访问它,而不是使用this.event
.
但是通过这种方式,你会indexOf
在每次删除中查找不必要的东西,为了解决这个问题,你可以index
在你的变量中定义变量v-for
,然后传递它而不是事件对象.
那是:
v-for="(event, index) in events"
...
<button ... @click="deleteEvent(index)"
Run Code Online (Sandbox Code Playgroud)
和:
deleteEvent: function(index) {
this.events.splice(index, 1);
}
Run Code Online (Sandbox Code Playgroud)
Kat*_*ink 37
你也可以使用.$ delete:
remove (index) {
this.$delete(this.finds, index)
}
Run Code Online (Sandbox Code Playgroud)
来源:
Afr*_*mad 10
不要忘记绑定键属性,否则总是删除最后一项
从数组中删除所选项的正确方法:
模板
<div v-for="(item, index) in items" :key="item.id">
<input v-model="item.value">
<button @click="deleteItem(index)">
delete
</button>
Run Code Online (Sandbox Code Playgroud)
脚本
deleteItem(index) {
this.items.splice(index, 1); \\OR this.$delete(this.items,index)
\\both will do the same
}
Run Code Online (Sandbox Code Playgroud)
可以通过id删除item
\n<button @click="deleteEvent(event.id)">Delete</button>\n
Run Code Online (Sandbox Code Playgroud)\n在你的 JS 代码中
\ndeleteEvent(id){\n this.events = this.events.filter((e)=>e.id !== id )\n}\n
Run Code Online (Sandbox Code Playgroud)\nVue 包装了观察到的 array\xe2\x80\x99s 突变方法,因此它们也会触发视图更新。点击这里了解更多详情。
\n您可能认为这会导致 Vue 丢弃现有 DOM 并重新渲染整个列表 - 幸运的是,情况并非如此。
\n当您使用输入时,它甚至更有趣,因为它们应该被绑定。如果您对如何在Vue2中使用插入和删除选项感兴趣,请参见示例:
请看看js小提琴
new Vue({
el: '#app',
data: {
finds: []
},
methods: {
addFind: function () {
this.finds.push({ value: 'def' });
},
deleteFind: function (index) {
console.log(index);
console.log(this.finds);
this.finds.splice(index, 1);
}
}
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://unpkg.com/vue@2.5.3/dist/vue.js"></script>
<div id="app">
<h1>Finds</h1>
<div v-for="(find, index) in finds">
<input v-model="find.value">
<button @click="deleteFind(index)">
delete
</button>
</div>
<button @click="addFind">
New Find
</button>
<pre>{{ $data }}</pre>
</div>
Run Code Online (Sandbox Code Playgroud)