Open FrankFang opened 7 years ago
@wlf1112 bug 1: 刷新页面后待办就木有了~
老师,改完了@FrankFang
样式加好了 demo Source Code
@lzm320856 无法将多个标记为已完成,报错:
Uncaught SyntaxError: Identifier 'CANDIDATE_MIME_TYPES' has already been declared
at (index):1
@FrankFang 已修改
@zhangjiuyi 界面很小清新哦
@WangXiaoyugg 永远不要给中文字加斜体样式
@lightbuild 使用 Date.prototype.Format
改写 Date 不太好,你可以用一个 formatDate 函数来做
function formatDate(date, format){...}
@ab690257072 BUG 1:你在页面上操作一段时间之后,就会发现新增的待办默认是「已完成」的。
@FrankFang 已修改,麻烦方方老师啦
@wlf1112 都是自己写的么,很棒啊
我参考官网的了@FrankFang
@FrankFang 方方老师辛苦了,已修改。
@FrankFang 已修改
@WuHanJun 英文有待改进……
@WangXiaoyugg bug 1: 输入框里默认有个数字1,不是我输入的。其他都 OK
首先新建项目目录
这样我们就可以基于之前的代码做新任务,同时不改动之前的代码。
学会一个框架的最好办法
学会一个框架的最好办法那就是——做毁一个项目。
接下来我们就要用 Vue.js 做一个待办事项小应用。简单起见,我们就不写 CSS 了,只用 HTML 和 JS 搞定。
我们的目标只有一个,就是搞清楚怎样用 Vue.js 进行开发。
需求
这个项目的英文名就暂定为 Todo,它有以下功能:
Getting Started
由于我们现在对 Vue.js 还一无所知,所以就走一步算一步先。
首先我们用 HTML 描绘一下我们的界面
page.html
div#app
,用于给 Vue 初始化div.newTask > input
用于让用户输入待办的内容ol.todos
用于容纳所有待办,每个待办就是一个<li>
添加待办
接下来我们做第一个需求,添加待办。
做之前你要想好流程:
ol.todos
里好的,开始做了。
我们用 todoList 数组作为所有待办事项的容器,newTask 作为 input 的值。
为什么要有 data?
这里出现了第一个令我们费解的地方——「为什么我们需要将 DOM 与 JS 变量(data)对应起来」。
如果我们用 jQuery 来写,直接在 input 的键盘事件中取出 input.value,构造一个
<li>
,插入到ol.todos
就完了嘛。对不对?这就是框架和库的区别了。jQuery 作为一个库,你想怎么用就怎么用,但是你在使用一个框架的时候,有很多「指导思想」是你要遵循的。Vue 的指导思想之一就是「尽量不要操作 DOM」,因为这个框架会帮你操作 DOM。
绑定数据
这一句将 input.value 与 data.newTodo 绑定起来了,而且是双向的:
怎么验证呢?
首先我们来验证在 JS 里改变 newTodo,input.value 就会变:
运行
webpack
,打开 page.html,可以看到 input 的值自己变化着。Tips:如果你不想每次都运行
webpack
,那么你可以新开一个命令行窗口,运行webpack --watch
,那么 webpack 就会在每次 JS 文件变化时自动重新运行。接下来验证 input.value 改变会导致 data.newTodo 变化:
F12 打开 console,然后在 input 里输入一些字符试试。
以上,就是双向绑定。
细节请自行查看 https://cn.vuejs.org/v2/guide/forms.html
绑定事件
我们需要在用户敲击 回车 的时候,在 data.todoList 里新建一个对象。
如何监听用户的键盘事件呢?请查看 https://cn.vuejs.org/v2/guide/events.html
看完这一节,你就能写出以下代码了:
app.js
page.html
这时你刷新 page.html,在 input 里面输入 回车,就会在控制台看到 todoList 不是空字符串了:
展示新待办
虽然 data.todoList 已经含有一个新的项目了,但是页面里却没有展示。
根据 https://cn.vuejs.org/v2/guide/list.html 写出下面代码:
page.html
然后重新刷新页面,在 input 输入一些字符,回车。你就会看到新增成功了:
优化
按照正常人的逻辑,添加成功后,input 的值应该清空,于是我们改写 app.js:
app.js
刷新试试效果如何吧。
标记为完成
思路:
<li>
里面添加一个 checkbox代码如下:
app.js
page.html
效果如下:
删除待办
思路:
代码如下:
app.js
page.html
效果如下(GIF有点大,请稍等或开代理)
保存待办事项
我们发现每次刷新页面,待办就没了。
这是因为这些代码都保存在内存里,而内存是无法持久的。所以我们选择保存在 localStorage 中。
思路:
代码如下:
app.js
由于我们只涉及数据的变化,所以 page.html 不变。
让我看到你的应用
你可以将这个应用部署到 GitHub Pages 上。
{{ }}
标记,不要紧,等一会就好。如果你不想让用户看见这些,可以看 https://cn.vuejs.org/v2/api/#v-cloak致饥人谷学员
Just get this shit done.
把你的预览页面发到下面,你就成功了。
如果还有时间,建议看看 TodoMVC 项目。比我们这个应用复杂一丢丢,你已经可以独自完成 TodoMVC 了,如果你完成了,把你的链接放在下面单独 at 我。
挑战