vue-13 经典实战项目——TodoMVC

  • TodoMVC 是一个非常经典的案例,功能非常丰富,并且针对多种不同技术分别都开发了此项目,比如
  • React、AngularJS、JQuery等等。
  • TodoMVC 案例官网:https://todomvc.com/examples/vue/
在官网首页右下角, 有 案例的模板下载 和 开发规范(需求文档),如下图: 数据列表渲染

当任务列表(items )没有数据时, #main 和 #footer 标识的标签应该被隐藏

任务涉及字段 : id 、任务名称(name )、是否完成( completed true 为已完成)

vue-13 经典实战项目——TodoMVC

添加任务

1. 在最上面的文本框中添加新的任务。

2. 不允许添加非空数据。

3. 按 Enter 键添加任务列表中,并清空文本框。

4. 当加载页面后文本框自动获得焦点,在 input 上使用 autofocus 属性可获得。

vue-13 经典实战项目——TodoMVC

显示所有未完成任务数

1. 左下角要显示未完成的任务数量。确保数字是由 <strong> 标签包装的。

2. 还要将 item 单词多元化( 1 没有 s , 其他数字均有 s ): 0 items , 1 item , 2 items 示例: 2 items left

vue-13 经典实战项目——TodoMVC

切换所有任务状态

1. 点击复选框 V 后,将所有任务状态标记为复选框相同的状态。

2. 当 选中/取消 了单个任务时,复选框 V 也应同步更新。

vue-13 经典实战项目——TodoMVC

移除任务项

1. 悬停在某个任务项上显示 X 移除按钮,可点击移除当前任务项

vue-13 经典实战项目——TodoMVC

  清除所有已完成任务

1. 单击右下角 Clear completed 按钮时,移除所有已完成任务。

2. 单击 Clear completed 按钮后,确保复选框清除了选中状态。

3. 当列表中没有已完成的任务时,应该隐藏 Clear completed按钮。

vue-13 经典实战项目——TodoMVC

编辑任务项

1. 双击 <label> (某个任务项)进入编辑状态(在 <li> 上通过 .editing 进行切换状态)。

2. 进入编辑状态后输入框显示原内容,并获取编辑焦点。

3. 输入状态按 Esc 取消编辑, editing 样式应该被移除。

4. 按 Enter 键 或 失去焦点时 保存改变数据,移除 editing 样式;

vue-13 经典实战项目——TodoMVC

路由状态切换(过滤不同状态数据)

根据点击的不同状态( All / Active / Completed ),进行过滤出对应的任务,并进行样式的切换。

vue-13 经典实战项目——TodoMVC

数据持久化

将所有任务项数据持久化到 localStorage 中,它主要是用于本地存储数据。

部分代码

<!doctype html>
<html data-framework="vue">
	<head>
		<meta charset="utf-8">
		<title>Vue.js • TodoMVC</title>
		<link rel="stylesheet" href="css/todomvc-common/base.css">
		<link rel="stylesheet" href="css/todomvc-app-css/index.css">
		<style> [v-cloak] { display: none; } </style>
	</head>
	<body>
		<section class="todoapp" v-cloak>
			<header class="header">
				<h1>todos</h1>
				<input class="new-todo" autofocus autocomplete="off" placeholder="What needs to be done?" v-model="newTodo" @keydown.enter="addTodo">
			</header>
			<section class="main" v-show="todos.length">
				<input id="toggle-all" class="toggle-all" type="checkbox" v-model="allDone">
				<label for="toggle-all">Mark all as complete</label>
				<ul class="todo-list">
					<li class="todo" v-for="todo in filteredTodos" :key="todo.id" :class="{completed: todo.completed, editing: todo == editedTodo}">
						<div class="view">
							<input class="toggle" type="checkbox" v-model="todo.completed">
							<label @dblclick="editTodo(todo)">{{todo.title}}</label>
							<button class="destroy" @click="removeTodo(todo)"></button>
						</div>
						<input class="edit" type="text" v-model="todo.title" v-todo-focus="todo == editedTodo" @blur="doneEdit(todo)" @keydown.enter="doneEdit(todo)" @keydown.esc="cancelEdit(todo)">
					</li>
				</ul>
			</section>
			<footer class="footer" v-show="todos.length">
				<span class="todo-count">
					<strong v-text="remaining"></strong> {{pluralize('item', remaining)}} left
				</span>
				<ul class="filters">
					<li><a href="#/all" :class="{selected: visibility == 'all'}">All</a></li>
					<li><a href="#/active" :class="{selected: visibility == 'active'}">Active</a></li>
					<li><a href="#/completed" :class="{selected: visibility == 'completed'}">Completed</a></li>
				</ul>
				<button class="clear-completed" @click="removeCompleted" v-show="todos.length > remaining">
					Clear completed
				</button>
			</footer>
		</section>
		<footer class="info">
			<p>Double-click to edit a todo</p>
			<p>Written by <a href="http://evanyou.me">Evan You</a></p>
			<p>Part of <a href="http://todomvc.com">TodoMVC</a></p>
		</footer>
		<script src="node_modules/todomvc-common/base.js"></script>
		<script src="node_modules/director/build/director.js"></script>
		<script src="node_modules/vue/dist/vue.js"></script>
		<script src="js/store.js"></script>
		<script src="js/app.js"></script>
		<script src="js/routes.js"></script>
	</body>
</html>

gitee源码:https://gitee.com/cyzgw/vue_demo.git

https://gitee.com/cyzgw/vue_demo/tree/master/todomvc

上一篇:C# 异步UDP发送接收数据


下一篇:ab压测