vue.js - 如何将任务添加到我的 Vue 2 待办事项应用程序的列表中?
问题描述
我正在尝试根据输入和添加任务按钮将任务添加到 Vue 中的任务列表,但我不断收到错误“未定义任务列表”。有人知道如何解决这个问题吗?代码如下:
<template>
<div id="input">
<form>
<input v-model="task.name">
<button v-on:click="addTask" v-bind:value="task.name">+</button>
</form>
<ol>
<div v-for="task in taskList" :key="task.id">
{{ task.name }}
<div v-if="task.completed">
<h2> Done </h2>
</div>
<div v-else>
<h2> Not done</h2>
</div>
</div>
</ol>
</div>
</template>
<script>
export default {
name: 'AddTask',
data: function() {
return {
taskList: [
{
name: 'task', completed: false, id: 3
}
] }
},
methods: {
addTask: function (task) {
taskList.push(task);
alert('test');
}
}
}
</script>
附言。也欢迎任何其他 Vue 技巧。
解决方案
您需要将您的 taskList 和您正在添加的当前任务分开,将其解耦为一个新对象,然后将其添加到您的 taskList 数组中。
在引用数据对象中的项目时,您需要使用 this
关键字——例如this.taskList
,而不是taskList
:
new Vue({
el: "#app",
data: {
id:1,
taskList: [],
currentTask:{
completed:false,
name:'',
id:this.id
}
},
methods: {
addTask: function() {
let newTask = {
completed:this.currentTask.completed,
name:this.currentTask.name,
id:this.currentTask.id
}
this.taskList.push(newTask);
this.id++;
//alert('test');
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<div id="input">
<ol>
<li v-for="task in taskList" :key="task.id">
{{ task.name }}
<input type="checkbox"
:checked="task.completed"
@change="task.completed = !task.completed">
<span v-if="task.completed">
Done
</span>
<span v-else>
Not Done
</span>
</li>
</ol>
<input type="text" v-model="currentTask.name">
<button v-on:click="addTask">+</button>
</div>
</div>
推荐阅读
- css - CSS网格区域属性没有响应
- dask - dask.delayed对象的分布和计算
- ocr - ocr - 光学字符识别图像尺寸/质量下降
- java - 在摇摆中显示 JTable 中的旧值
- javascript - 使用 multer+angular 6 的“假路径”问题
- javascript - vanilla javascript:拦截输入键并更改键值
- css - 无法在 VS Code 中链接我的 CSS Bootstrap 文件
- android - RecyclerView 在 AlertDialog 框中不可见
- php - 将表数据插入数据库
- android - 在 PagedList.BoundaryCallback 中报告网络错误