小例--vue的todolist

知识点

1.v-on事件
.keyup,从特定键触发时才触发回调,可以通过键别名或代码绑定;
<!-- 键修饰符,键别名 -->
<input @keyup.enter="onEnter">
<!-- 键修饰符,键代码 -->
<input @keyup.13="onEnter">
.dblclick//双击时触发
.blur//失焦时触发
2.computed取值get,设置set,默认get,更多解读小例音乐盒
3.vm.$nextTick( [callback] ),DOM 更新循环之后执行调延
小例--vue的todolist
4.vm.$refs,功能类似于getElementsByTagName,前者返回数组,后者返回类数组
.在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;
.如果用在子组件上,引用就指向组件实例:
.$refs 只在组件渲染完成后才填充,并且它是非响应式的。

小例--vue的todolist

小例--vue的todolist

5.,根据条件找到某项,或某项下标,接收一个回调函数
.find()//返回第一个符合条件的元素,不符合undefined
.findIndex()//返回第一个符合条件元素的下标,不符合-1
小例--vue的todolist
6.window.onhashchange=function(){}//监测hash变化时触发
7.localStorage.getItem(取缓存数据)localStorage.setItem(存数据)
.localStrorage存储的是文本
.JSON.stringify()//存的时候要将string转为json字符串
.JSON.parse()//取的时候要将json转为可用的对象
8.vm.$watch(prop,function(newVal,oldVal){})//
.第一个参数为监控的属性名或属性的路径

小例--vue的todolist

.常用写法
小例--vue的todolist

.深度监控(没有深度监控的话,对miaov的监控监测不到a的变化);

小例--vue的todolist

功能

1. 增
小例--vue的todolist
2.全选

小例--vue的todolist

3.删除,从当前下标开始,删除一个
小例--vue的todolist

4.双选进入编辑状态,自动获取焦点

小例--vue的todolist

5.编辑完成,编辑完成为空时移除,编辑取消

小例--vue的todolist

6. 根据hash不同,过滤渲染的数据
a. 全部任务
b. 完成的任务
c. 未完成的任务

小例--vue的todolist

7.存储数据

小例--vue的todolist


思考

1.编辑函数,修改数据后马上获取焦点无效果
原因:数据修改了,但是DOM还没来的及更新,焦点在dom没更新前就聚焦了,因此更新后没效果
解决:vm.$nextTick()
2.前者只能监控到list变化,但是list下的checked监控不到

小例--vue的todolist

转用深度监控

小例--vue的todolist

3.当编辑为空时,并enter完成编辑时,会同时触发enter和blur事件,也就是editDone会执行两次

eg:
li a
li b
li c
第一种情况:li上没有唯一key值,dom结构就地复用
清空enter第一个li :a被删
第一次editDone执行removeTodo(‘li a'),执行splice(0,1),li a消失,此时就地复用规则使 得li b顶替了li a的位置
第二次editDone执行,由于li b内容不为空,不执行删除
清空enter最后一个li:bc同时被删
第一次editDone执行removeTodo(‘li c'),执行splice(2,1),li c消失,由于是最后一项,所以没有顶替者
第二次editDone执行removeTodo(‘li c') ,因为li c不存在了返回-1,执行splice(-1,1),最后一项li b被删除

第二种情况:li上有唯一key值,dom结构不复用
清空enter第一个li :ac被删
第一次editDone执行removeTodo(‘li a'),执行splice(0,1),li a消失,由于key值唯一不就地复用,无人顶替a
第二次editDone执行,由于li 不不存在,执行splice(-1,1),最后一项被删除
其他以此类推
解决:小例--vue的todolist


优化

1.获取焦点由原生js方法

小例--vue的todolist

升级=》vm.$refs

小例--vue的todolist

2.判断hash值为那种情况,用if else
小例--vue的todolist

升级=>存个对象,三个中哪个存在就叫哪个,不存在的直接为all

小例--vue的todolist

3.过滤list,用switch

小例--vue的todolist

升级=>再次升级filterArr对象,存hash,筛选共用
小例--vue的todolist