vue todo应用程序删除第一个元素而不是特定的

lpwwtiir  于 2023-06-24  发布在  Vue.js
关注(0)|答案(1)|浏览(116)

我试图在vue.js中做一个todo应用程序,当我试图删除元素时,它总是从数组中删除第一个元素,不知道为什么。我试图删除元素使用过滤器,但然后什么也没有发生,什么也没有被删除。

<template>
  <div class="maindiv">
    <p>Todo list</p>
    <input type="text" v-model="taskinput" /> <br />
    <input type="button" value="Add" @click="addTodo" /> <br /> <br />
    <h1 v-if="!taskValid" >
      Task cannot be empty
    </h1>
    <input type="button" v-bind:value="hideTasks ? 'Hide' : 'Show' " class="hidebtn" @click="changeStatus" /> <br />
    <div v-show="hideTasks">
      <li v-for="todo in todolist" v-bind:key="todo.id" >
        <ul :class="todo.done ? 'done' : 'notdone'">
          <input type="checkbox" v-model="todo.done" />
          {{ todo.task }}
          <button @click="deleteTodo(key)">Delete</button>
        </ul>
      </li>
    </div>
  </div>
</template>
<script>
export default {
  name: 'App',
  data: function () {
    return {
      todolist: [{task: 'do something', done: false}],
      taskinput: '',
      hideTasks: true,
      taskValid: true,
    }
  },
  methods: {
    addTodo: function () {
      if (this.taskinput.length !== 0) {
        this.todolist.push({ task: this.taskinput, done: false });
        this.taskinput = '';
        this.taskValid = true;
      }
      else {
        this.taskValid = false;
      }
    },
    deleteTodo: function(index) {
      this.todolist.splice(index, 1);
      console.log(this.todolist);
    },
    changeStatus: function () {
      this.hideTasks = !this.hideTasks;
    }
  }
}
</script>
2skhul33

2skhul331#

你的代码中有很多错误。首先,您试图绑定密钥与ID,这是不存在的数据。使用索引

而不是id
然后在delete方法中发送此索引。如果你要通过在数据中添加id来使用id,那么当你将id发送给delete方法时,你需要在使用splice之前找到具有相同id的索引对象,你可以使用 indexof 来查找数组中对象的索引。

相关问题