Vue+element实现todo(四)

(一)编辑item
现在data里添加一个newtodotitle的属性,以防我们不想编辑回答原来的值,另一个就是无论是否在编辑状态。输入框总是会出现,再在data里添加一个edittodo的属性,就是说,如果edittodo为空,则一定不在编辑状态

image.png

然后再给I标签绑定一个点击事件,当点击时,输入框才会出现,
image.png

这里我们使用了一个全新的对象存储,如果不这样做的话,我们对item的任何修改都会反应到editTodo,为防止这样情况,我们要为editTodo创建一个全新的对象。
这时点击I标签,发现所有的输入框都出现了,我们需要再增加一个条件,只有item的ID和editTodo的ID相等时,才表示此item正在编辑,
image.png

然后将Item的值跟Input绑定,使用v-model,item 的 title 就会跟着编辑框输入的值来变化了,而且想反悔随时还原,因为已经把编辑前的状态存到editTodo里了,

接下来就是敲击回车,先绑定一个editDown事件


image.png

因为item.title就是跟随输入框变化的,所以直接把editTodo的值直接清空,这样v-if的判断也会失效,编辑框也会隐藏。


image.png

如果要取消,再绑定一个事件cancelEdit事件
image.png

把编辑的 item 标题还原,我们的原始信息存在 editedTodo,取出来即可,然后把editTodo的值直接清空


image.png

(二)自动聚焦
现在还有一个问题,就是我们点击后,不能自动聚焦,需要手动才可以编辑,input 元素有一个 focus 方法,问题是如何在vue中获取,从而操作他,Vue 的自定义指令可以完成这个功能。官方文档让我们自己注册一个指令,指令就是之前写到的v-if,v-model这些,然后实现钩子函数,指定被绑定元素的行为,按照官方文档比葫芦画瓢实现一个focus指令,

image.png

然后就可以使用这个指令,绑定到input框,因为元素一旦出现一定要聚焦的,所以条件始终为 true。
image.png

这样用户体验就会好很多~

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • vue概述 在官方文档中,有一句话对Vue的定位说的很明确:Vue.js 的核心是一个允许采用简洁的模板语法来声明...
    li4065阅读 12,006评论 0 25
  • 深入响应式 追踪变化: 把普通js对象传给Vue实例的data选项,Vue将使用Object.defineProp...
    冥冥2017阅读 10,289评论 6 16
  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 6,641评论 0 6
  • 主要还是自己看的,所有内容来自官方文档。 介绍 Vue.js 是什么 Vue (读音 /vjuː/,类似于 vie...
    Leonzai阅读 8,653评论 0 25
  • 看着这部电影(爱有来生),忘不了剧情。若爱有来生,茶凉了,我再帮你续一杯吧……就这些简单的话演绎了一个世纪的爱恨...
    伍月的晴空阅读 3,173评论 10 4