# 给自己做一个todolist应用
根据自己的需求,给自己做一个todolist,放到个人博客上实际使用。
也借此进一步熟悉vue.js 作为demo上传到github,不要求一步完善,不好可以再改嘛,不然失去了传到github的本质意义
写到不懂时,可以借鉴:
https://www.cnblogs.com/yjzs/p/13173052.html https://blog.csdn.net/wangjiaohome/article/details/79910584
# 界面和功能初步设计
———————————界面草稿开始
【输入框:要做什么呢?】【按钮:提交】
(鸡汤:如)行到水穷处,坐看云起时。
进行中 3 【按钮:全部清除】
- [ ] 事项1 X
- [ ] 事项2 X
- [ ] 事项3 X
已完成 4 【按钮:全部清除】
- [x] 事项4 08:48 X
- [x] 事项3 07:17 X
- [x] 事项2 06:30 X
- [x] 事项1 05:48 X
———————————界面草稿结束
功能备注:
- “进行中”事项点击可修改、可拖拽排序
- “已完成”事项点击可修改,但不可以可拖拽排序
- “全部清除”按钮要明显且隔远一点,不要误点
- 显示各个事项数量
- 存储在localStorage里
- “进行中”输入框,回车可以提交
- 先完成功能、再改bug、再做样式
# Vue事件修饰符.prevent
🍎 加了个.prevent之后,把删除数组后checkbox的bug改好了!原理是什么呢?
️.prevent
不是js方法,是Vue事件修饰符!很大收获。
备注:用JavaScript的event.preventDefault()
试了没有用。
# 回车可以提交
回车键盘事件
key值忘记写成:key,结果重复了
sublime 新文件格式快捷键 mac:command + shift + p
<!-- 键修饰符,键别名 -->
<input @keyup.enter="onEnter">
<!-- 键修饰符,键代码 -->
<input @keyup.13="onEnter">
2
3
4
# 显示完成时间
🍎 学习了:
- 获取时间
- 给数组和对象添加属性、插入数组
- 在获取时间的方法中,还学习了箭头函数
js中=>
的含义:=>
是es6语法中的arrow
function (x) => x + 6
相当于function(x){ return x + 6; };
# 在markdown里放vue组件
在markdown里放vue组件,看文档https://vuepress.vuejs.org/zh/guide/using-vue.html
所有在 .vuepress/components 中找到的 .vue 文件将会自动地被注册为全局的异步组件,如:
.
└─ .vuepress
└─ components
├─ demo-1.vue
├─ OtherComponent.vue
└─ Foo
└─ Bar.vue
你可以直接使用这些组件在任意的 Markdown 文件中(组件名是通过文件名取到的):
<demo-1/>
<OtherComponent/>
<Foo-Bar/>
具体怎么放:https://blog.csdn.net/qq_14863671/article/details/94005585
# 使用localStorage
# Window localStorage 属性
localStorage.getItem
(取缓存数据)localStorage.setItem
(存数据)
如:localStorage.setItem("lastname", "Smith")
localStorage.removeItem(“a”)
(移除数据)
注意:.localStrorage存储的是文本
.JSON.stringify()
//存的时候要将string转为json字符串
.JSON.parse()
//取的时候要将json转为可用的对象
# mounted 与 window is not defined
ReferenceError: window is not defined
"ReferenceError: localStorage is not defined"
最有用:(解决了问题)https://segmentfault.com/q/1010000011016483
好像也可以,还没试过:https://forum.vuejs.org/t/localstorage-is-not-defined-when-using-with-vue-server-renderer-and-node/4179/5
created() —— 出问题,要改成 mounted https://blog.csdn.net/sunhuaqiang1/article/details/86702926 https://www.cnblogs.com/Geooo/p/11279500.html
# 为什么是用 let,不是var 或 const?
# 调用方法,前面也要加this.
# 只看已完成,只看未完成,查看全部
思路:
v-show 或者 v-if——最后用了v-if
下拉框或者单选checked——最后用了radio
watch 或 computed——最后用了methods
http://www.divcss5.com/html/h490.shtml https://blog.csdn.net/kermit_father/article/details/82723240
https://bbs.csdn.net/topics/320019711
https://jingyan.baidu.com/article/597a0643516738312b5243fe.html
# 点击修改
# 思路
- li内同时存在显示事项的span和input,显示span,隐藏input
- 双击li,隐藏span,出现input
- 声明一个showChangeTodo,一个showChangeDone,初始值默认false,双击取反值,先做showChangeTodo
- bug:做了之后所有的li都变成input了,需要showChangeTodo成为数组,然后取index,只隐藏和显示当前的
- 输入完,回车,判断
- 判断1:内容为空,删除此条
- 判断2:不为空,隐藏input,显示内容为li
- 记得储存进localStorage
# dblclick 双击事件
dblclick,很容易漏掉中间这个“l”,事件如果没有触发,先找这个原因。
# v-if和v-show
https://www.jianshu.com/p/b9623407da6f
v-show小结:
- v-show仅仅控制元素的显示方式,通过display属性的none
- 当我们需要经常切换某个元素的显示/隐藏时,使用v-show会更加节省性能上的开销
v-if小结:
- v-if会控制这个DOM节点的存在与否。
- 如果在运行时条件很少改变,则使用 v-if 较好。
# 数组添加、修改、删除
https://www.cnblogs.com/rong88/p/11947252.html https://www.cnblogs.com/bigerf/p/6008304.html
用了比较麻烦的方式写完了,希望后面能改进成比较节省性能的方法。