作者:HelloGitHub-追梦人物

追梦人物的 Vue 系列教程在他的博客已经全部更新完成,地址:

https://www.zmrenwu.com/courses/vue2x-todo-tutorial/

注意:追梦的博客在国外所以访问速度慢,需要耐心等待一下。本号将不再连载本系列,望周知。

UI

我们先来写好 Todo 应用的 HTML 文档模板,然后再用 Vue 来操作模板中的数据。由于我们的重点在 Vue 的学习,因此 Todo 应用的 UI 采用了极简风格设计。可以看到模板的代码量非常少,如果加入过多的 CSS 样式,在教程中代码看起来就会非常混乱。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>HelloVue Todo Tutorial</title>
<style>
.completed {
text-decoration: line-through;
} .selected {
color: red;
}
</style>
</head>
<body>
<div id="todo-app">
<div>
<input type="button" value="全部标为完成"/>
<input type="text" placeholder="添加 todo"/>
</div>
<!-- todo list -->
<ul>
<li>
<span class="completed">学习 Vue</span>
<input type="button" value="标为完成">
<input type="button" value="删除">
<input type="text" value="编辑 todo..."/>
</li>
<li>
<span>整个牛项目</span>
<input type="button" value="标为完成">
<input type="button" value="删除">
<input type="text" value="编辑 todo..."/>
</li>
<li>
<span>迎娶白富美走上人生巅峰</span>
<input type="button" value="标为完成">
<input type="button" value="删除">
<input type="text" value="编辑 todo..."/>
</li>
</ul>
<!-- end todo list -->
<div>
<span>剩余 3 项未完成 ---</span>
<span>筛选:
<input type="button" class="selected" value="全部">
<input type="button" value="进行中">
<input type="button" value="已完成">
<input type="button" value="清除已完成">
<input type="button" value="清除全部">
</span>
</div>
</div>
</body>
</html>

请复制上述代码到一个 HTML 文件然后使用浏览器打开,你就可以看到界面了。

不过目前还只有 UI,我们接下来将使用 Vue 一步步实现以下完整的功能:

  • 在顶部输入框输入内容,按回车键添加 todo
  • 全部 todo 列表显示在输入框下方的列表
  • 将单个 todo 标为完成
  • 删除单个 todo
  • 双击 todo 进行编辑,按 esc 键取消编辑
  • 下方显示未完成的 todo 数量
  • 可通过筛选按钮筛选未完成的 todo、已完成的 todo 等
  • 可一次性将全部 todo 标为完成,可一次性清除全部已完成 todo,或者一次性清除全部 todo。
  • 其它更加丰富的功能

接下来就让我们一个一个以 Vue 的方式来实现它们吧!

todo 列表

在上面的模板代码中,todo 列表的值都是我们直接写在 HTML 文档里的。合理的情况应该是根据用户添加和删除 todo 时动态地显示全部内容,这就要交给 Vue 了。当然,第一步是要先构建 Vue 的实例,注意这个实例目前是没有绑定任何数据的,其 data 是一个空函数,不返回任何有用的数据:

<body>
<div id="todo-app">
...
</div>
<script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script>
<script>
var app = new Vue({
el: '#todo-app',
data: function () {
},
})
</script>
</body>

我们现在还没有实现用户添加 todo 的功能,我们先做个弊,假设用户已经输入了一些 todo,存在一个 todos 列表里,现在需要将 Vue 实例和这个 todos 绑定:

var app = new Vue({
el: '#todo-app',
data: function () {
return {
todos: [
{id: 0, title: '学习 Vue'},
{id: 1, title: '整个牛项目'},
{id: 2, title: '迎娶白富美走上人生巅峰'},
]
}
},
})

现在每一个 todo 都是一个对象,它有 id 和 title 两个属性,id 用来唯一标识这个 todo。然后我们就在模板中循环显示这个 todos 列表,Vue 中循环指令用 v-for:

<div id="todo-app">
...
<!--todo list-->
<ul>
<li v-for='todo in todos' :key='todo.id'>
<span>{{ todo.title }}</span>
<input type="button" value="标为完成">
<input type="button" value="删除">
<input type="text" value="编辑 todo..."/>
</li>
</ul>
<!-- end todo list -->
...
</div>

注意到 v-for='todo in todos' 这种写法,其含义就是循环 todos 列表,将列表的每一项保存到 todo 变量,循环渲染 li 元素的内容。特别注意我们还给 li 元素绑定了一个 key 属性,这将告诉 Vue 每个渲染的 li 元素都是不同的,因为 id 不同。

你可以删除或者添加 todos 列表中的元素,然后刷新浏览器,可以看到页面渲染的内容会跟着变化。你也可以在按 F12 进入浏览器的调试窗口,在命令行(console)输入命令:

app.todos = [
{id: 1, title: '整个牛项目'},
{id: 2, title: '迎娶白富美(或走上人生巅峰)'},
]

这个 app 是我们创建的 Vue 实例的名字,然后引用它绑定的数据 todos,我们给它赋了一个新的值,你会实时地看到浏览器渲染的结果变化了。Vue 就是这么神奇!

显然,人工为 todos 列表添加数据是一点也不好玩的,我们希望在上方的输入框输入想要添加的 todo,然后按回车就自动给我们添加 todo,接下来我们就来实现它。


追梦人物的 Vue 系列教程在他的博客已经全部更新完成,地址:

https://www.zmrenwu.com/courses/vue2x-todo-tutorial/

注意:追梦的博客在国外所以访问速度慢,需要耐心等待一下。本号将不再连载本系列,望周知。

第 2 篇:上手 Vue 展示 todo 列表的更多相关文章

  1. 05-商品类别数据和VUE展示

    一.商品类别数据和VUE展示 1.商品类别数据接口 将商品类别数据展示出来,视图(views.py)代码如下: class CategoryViewset(mixins.ListModelMixin, ...

  2. django rest_framework vue 实现用户列表分页

    django rest_framework vue 实现用户列表分页 后端 配置urls # 导入view from api.appview.userListView import userListV ...

  3. 10 分钟上手 Vue 组件 Vue-Draggable

    Vue 综合了 Angualr 和 React 的优点,因其易上手,轻量级,受到了广泛应用.成为了是时下火热的前端框架,吸引着越来越多的前端开发者! 本文将通过一个最简单的拖拽例子带领大家快速上手 V ...

  4. php大力力 [039节] 修改一下后台项目,同时启用印象笔记,要做的事情todo列表,记录在印象笔记,速度快一些

    php大力力 [039节]  修改一下后台项目,同时启用印象笔记,要做的事情todo列表,记录在印象笔记,速度快一些

  5. 用Vue实现状态列表的操作涵盖所有的知识点

    用Vue实现状态列表的操作涵盖所有的知识点

  6. 结合vue展示百度天气接口天气预报

    HTML: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  7. vue实现城市列表选择

    成果展示 最后的成果就是下面所展示的内容,因为gif图没有做,只能截图所展示,接下来,会带着大家一步一步的完成下面功能,脚手架搭建和node安装在本次案例不会讲解,如果了解,可以在我的博客园找到有详细 ...

  8. CSS3 页面中展示邮箱列表点击弹出发送邮件界面

    CSS3 页面中展示邮箱列表点击弹出发送邮件界面 代码: <!DOCTYPE html> <html> <head> <meta charset=" ...

  9. linux命令行todo列表管理工具Taskwarrior介绍

    Taskwarrior 是一款在命令行下使用的TODO列表管理工具,或者说任务管理工具,灵活,快速,高效. 安装 在ubuntu 14.04 中,可从官方仓库安装task软件包 sudo apt-ge ...

随机推荐

  1. mysql5.7开启慢查询日志

    环境:centos7 mysql版本:5.7.28 一.什么是慢查询 MySQL默认10s内没有响应SQL结果,则为慢查询 当然我们也可以修改这个默认时间 查看慢查询的时间 show variable ...

  2. C++ 构造函数 隐式转换 深度探索,由‘类对象的赋值操作是否有可能调用到构造函数’该实验现象引发

    Test1 /** Ques: 类对象的赋值操作是否有可能调用到构造函数 ? **/ class mystring { char str[100]; public: mystring() //myst ...

  3. Effective C++ 读书笔记 名博客

    https://www.cnblogs.com/harlanc/tag/effective%20c%2B%2B/default.html?page=3

  4. Win7 64X 安装VisualSVNServer 2.6.0过程中出现Custom action InstallWMISchemaExcute failed: Cannot query proxy blanket: No such interface supported (0x80004002)

    Win7 64X 安装VisualSVNServer 2.6.0过程中出现错误:Custom action InstallWMISchemaExcute failed: Cannot query pr ...

  5. A4988两相四线步进电机驱动模块使用经验

    1.A4988模块可以驱动两相四线步进电机,模块引脚及接线图如下: 2.步进电机引线如下: 3.引脚: ENABLE:低电平有效,用于打开和关闭场效应管的输出: RESET:低电平有效,芯片复位: S ...

  6. C# 生成chart图表的三种方式

    .net中,微软给我们提供了画图类(system.drawing.imaging),在该类中画图的基本功能都有.比如:直线.折线.矩形.多边形.椭圆形.扇形.曲线等等,因此一般的图形都可以直接通过代码 ...

  7. SpringBoot使用activiti自定义流程demo解析

    环境搭建[这里直接讲解自定义流程] 集成 Activiti Modeler 下载源码 我这里选用的是 Activiti 5.23.0 版本的页面,下载 zip,解压 Activiti 5.23.0 源 ...

  8. CV学习日志:CV开发常用库及其头文件

    CV开发过程中,通常会涉及以下库:(1)语言/视觉:C.CPP.QT.OpenCV(2)通信/模拟:ROS2.Gazebo.Webots(3)日志/数学:Eigen3.Gflags.Glog.Cere ...

  9. web中的HTML CSS

    HTML  超文本标记语言      页面的结构  首行声明文档类型>根标记>头部标记/主体标记      标记         div 布局 切割 分割 划分区域         spa ...

  10. MeteoInfoLab脚本示例:FY-3C全球火点HDF数据

    FY-3C全球火点HDF数据包含一个FIRES二维变量,第一维是火点数,第二维是一些属性,其中第3.4列分别是火点的纬度和经度.下面的脚本示例读出所有火点经纬度并绘图.脚本程序: #Add data ...