簡體   English   中英

從Vue中的數組中刪除項目

[英]Remove item from array in Vue

我有以下任務列表應用程序。 我正在嘗試實現delete功能。 我知道我需要使用splicearray中刪除項目,但是如何僅定位我單擊其按鈕的項目?

https://jsfiddle.net/clintongreen/txtrage5/1/

JS

new Vue({

    el: '#tasks',

    data: {
        message: 'Tasks',
        completed: null,
        newTaskName: '',
        tasklist: [
            { description: 'Read', completed: true },
            { description: 'Write', completed: true },
            { description: 'Edit', completed: false },
            { description: 'Publish', completed: false }
        ]
    },

    methods: {
        completeTask: function(task){
            // console.log(this.tasks.description);
            task.completed = true;
        },
        newTask: function(){
            this.tasklist.push({description: this.newTaskName, completed: false});
        },
        removeTask: function(task){
            this.tasklist.splice(this.task.index, 1);
        }
    }

})  

HTML

<div class="container" id="tasks">

    <div class="panel panel-default">
      <div class="panel-heading">
        <h3 class="panel-title">
            {{ message }}
        </h3>
      </div>
      <ul class="list-group">
        <li class="list-group-item clearfix" v-for="task in tasklist" >
            {{ task.description }}
            <!-- <button class="btn btn-primary btn-sm pull-right" v-if="!task.completed" @click="completeTask(task)">Complete</button> -->
            <div class="btn-group btn-group-sm pull-right" role="group" v-if="!task.completed">
              <button type="button" class="btn btn-primary" @click="completeTask(task)">Complete</button>
              <button type="button" class="btn btn-info">Edit</button>
              <button type="button" class="btn btn-danger" @click="removeTask(task)">Delete</button>
            </div>
            <button class="btn btn-default btn-sm completed text-muted pull-right disabled" v-else>Completed</button>
        </li>
        <li class="list-group-item clearfix">
            <input v-model="newTaskName" @keyup.enter="newTask" type="text" class="pull-left">
            <button class="btn btn-success btn-sm pull-right" @click="newTask">Add Task</button>
        </li>
      </ul>
    </div>

</div>

使用v-for中任務的索引來決定要splice()的項目:

v-for="(task, index) in tasklist"

你的按鈕:

<button type="button" class="btn btn-danger" @click="removeTask(index)">Delete</button>

然后簡單地說:

removeTask: function(index) {
    this.tasklist.splice(index, 1);
}
removeTask: function(task){
    this.tasklist.splice(this.tasklist.indexOf(task), 1);
}

對於 Vue2 使用delete 請參閱 API。

removeTask: function(index){
    this.$delete(this.tasklist, index)
}

您可以使用 indexOf 從數組中獲取當前索引

remove: function (task){
      this.tasklist.splice(this.tasklist.indexOf(task),1);
    },

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM