TodoMVC是前端框架学习中的经典案例,它包含了一个待办事项应用的核心功能,足够简单又能覆盖框架的主要特性。本教程将带你使用Vue.js实现一个完整的TodoMVC应用,帮助你理解Vue的核心概念和实践技巧。
目录
项目结构
Vue TodoMVC应用主要由一个App.vue文件组成,包含 三个部分:
<script>: 包含应用的数据和逻辑<template>: 定义应用的HTML结构<style>: 引入样式表
数据管理
在data()函数中,我们定义了应用需要的数据:
data() {
return {
todos: [
{ id: 1, title: '吃饭', completed: false },
{ id: 2, title: '睡觉', completed: true },
{ id: 3, title: '打豆豆', completed: false }
],
visibility: 'all', // 当前过滤状态:'all', 'active', 'completed'
editingId: null, // 当前正在编辑的任务ID
beforeEditCache: '' // 编辑前的任务标题(用于取消编辑时恢复)
}
}
这些数据包括:
- 任务列表数组
- 当前过滤状态
- 编辑状态相关变量
添加任务
添加任务的功能通过addTodo方法实现:
addTodo(e) {
const title = e.target.value.trim() // 获取输入框的值并去除首尾空格
if (!title) { // 如果输入为空,不添加任务
return
}
this.todos.push({ // 向todos数组添加新任务
id: Date.now(), // 使用当前时间戳作为唯一ID
title, // 任务标题
completed: false // 新任务默认未完成
})
e.target.value = '' // 清空输入框
}
在模板中,我们为输入框添加了@keyup.enter事件监听器,当用户按下回车键时触发addTodo方法:
<input @keyup.enter="addTodo" class="new-todo" placeholder="What needs to be done?" autofocus>
显示任务列表
使用v-for指令遍历filteredTodos计算属性,显示任务列表:
<li
v-for="todo in filteredTodos"
:key="todo.id"
:class="{completed: todo.completed, editing: editingId === todo.id}"
>
<!-- 任务内容 -->
</li>
filteredTodos计算属性根据当前的visibility值过滤任务:
filteredTodos() {
switch (this.visibility) {
case 'active':
return this.todos.filter(todo => !todo.completed)
case 'completed':
return this.todos.filter(todo => todo.completed)
default:
return this.todos
}
}