javascript - 如何从 Vue.js 中的数组中删除项目

标签 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>

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

});

我试图将事件传递给函数,而不是用切片函数删除那个函数,我认为这是从数组中删除一些数据的代码。使用 simpleb 按钮和 onclick 事件从数组中删除数据的最佳和最干净的方法是什么?

最佳答案

您以错误的方式使用了 splice

重载是:

array.splice(start)

array.splice(start, deleteCount)

array.splice(start, deleteCount, itemForInsertAfterDeletion1, itemForInsertAfterDeletion2, ...)

Start 表示要开始的索引,而不是要删除的元素。并且您应该将第二个参数 deleteCount 传递为 1,这意味着:“我想删除从索引 {start} 开始的 1 个元素”。

所以你最好选择:

deleteEvent: function(event) {
  this.events.splice(this.events.indexOf(event), 1);
}

此外,您正在使用一个参数,因此您可以直接访问它,而不是使用 this.event

但是这样你会在每次删除时查找不必要的indexOf,为了解决这个问题你可以在你的v-for中定义index变量,然后传递它而不是事件对象。

即:

v-for="(event, index) in events"
...

<button ... @click="deleteEvent(index)"

和:

deleteEvent: function(index) {
  this.events.splice(index, 1);
}

关于javascript - 如何从 Vue.js 中的数组中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43046332/

相关文章:

javascript - 每行仅突出显示一个单元格

vuejs2 - Vuetables2 如何为 vue-client-table 中的特定数据添加动态样式

javascript - 组件数据函数返回的 Vue 2 数据未定义

vue.js - Uncaught ReferenceError : photoModule is not defined

javascript - Vuejs 如何创建多语言网站

vue.js - Vue 2 Prop 未定义

javascript - 只保留前三个 div

javascript - 测试 React 组件 : How does it work?

javascript - 防止选择选项更改回默认值

javascript - 在末尾创建一个带有内置取消符号的按钮/标签