Vue制作Todo List网页


Posted in Javascript onApril 26, 2017

Vue学习完成Todo List网页,供大家参考,具体内容如下

Vue制作Todo List网页

跟着老师学习Vue,我喜欢清爽的界面,就自己改了样式,看起来还不错,以后就用来记录要做的事情,实用性还蛮强。

Vue非常容易上手,运用到了双向绑定机制,即HTML里的DOM元素与JS里的Vue实例进行双向绑定,只要Vue实例中的代理数据改变,HTML中的实际数据就会跟着变,这和原生的Js的命令驱动模式不同,它是数据驱动模式,通过数据的改变来控制DOM的变化。什么意思呢?我们会在接下去的学习中慢慢实践。

Todo List这个网页用到了很多Vue的指令,在这里我贴出一部分代码,全部代码请戳我的Github

以下是HTML部分

<div class="main">
 <h3 class="big-title">添加任务:</h3>
 <input 
  placeholder="在此添加任务" 
  class="task-input" 
  type="text"
  v-model="things"
  @keyup.enter="addTodo"
 />
 <ul class="task-count" v-show="list.length">
  <li>
   {{unCheckedLength}}个任务未完成</li>
  <li class="action">
   <a :class="{active: visibility == 'all'}" href="#all" rel="external nofollow" >所有任务</a>
   <a :class="{active: visibility == 'unfinished'}"href="#unfinished" rel="external nofollow" >未完成任务</a>
   <a :class="{active: visibility == 'finished'}"href="#finished" rel="external nofollow" >完成任务</a>
  </li>
 </ul>
 <div class="tasks">
  <span class="no-task-tip" v-show="!list.length">还没有添加任何任务</span>
  <ul class="todo-list">
   <li class="todo" v-for="item in filteredList" :class="{completed: item.isChecked,editing:item === editItem}" >
    <div class="view">
     <div class="word">
      <input class="toggle" type="checkbox" v-model="item.isChecked" >
      <label @dblclick="editTodo(item)">{{item.title}}</label>
     </div>
     <button class="destroy" type="text" @click="deleteTodo(item)">×</button>

    </div>
    <input 
     v-focus="editItem === item" 
     class="edit" 
     type="text" 
     v-model="item.title"
     @blur="edited"
     @keyup.enter="edited"
     @keyup.esc="cancel(item)"
    />
   </li>
  </ul>
 </div>
</div>

Vue实例部分

var vm = new Vue({
 el: ".main",
 data: {
  list:list,
  things:"",
  editItem:"",
  beforeTitle:"",
  visibility:"all",
  inputId:"",
 }, 
 watch:{
  list:{
   handler:function(){
    store.save("todolist",this.list)
   },
   deep:true
  }
 },
 computed:{
  unCheckedLength(){
   return this.list.filter(function(item){
    return item.isChecked == false
   }).length
  },
  filteredList(){   
   return filter[this.visibility] ? filter[this.visibility](this.list) : list
  }
 },
 methods: {
  addTodo(ev){
   if(this.things !== ""){
    var item = {
     title:this.things,
     isChecked:false, 
    }
    this.list.push(item)
   }    
   this.things = "";
  },
  deleteTodo(item){
   var index = this.list.indexOf(item);
   this.list.splice(index,1);
  },
  editTodo(item){ 
   this.beforeTitle = item.title;
   this.editItem = item
  },
  edited(item){
   this.editItem = ""
  },
  cancel(item){
   item.title = this.beforeTitle;
   this.editItem = "";
   this.beforeTitle = ""
  }
 },
 directives:{
  "focus":{         
   update(el,binding){
    if(binding.value){
     el.focus()
    }

   }
  }
 }
});

这是一个基本的Vue实例,el是和DOM元素连接的挂载点,data是代理数据,在DOM的内容中如果要用到代理数据就用{{xxx}}表示,比如{{list}},{{visibility}},而当data中的代理数据出现在DOM标签里的时候就不需要用花括号。

new Vue({
 el: ".main",
 data: {
  list:list,
  things:"",
  editItem:"",
  beforeTitle:"",
  visibility:"all",
  inputId:"",
 }
})

Vue要用大的方法都放在methods部分

methods: {
   addTodo(ev){
    if(this.things !== ""){
     var item = {
      title:this.things,
      isChecked:false, 
     }
     this.list.push(item)
    }    
    this.things = "";
   },
   deleteTodo(item){
    var index = this.list.indexOf(item);
    this.list.splice(index,1);
   },
   editTodo(item){ 
    this.beforeTitle = item.title;
    this.editItem = item
   },
   edited(item){
    this.editItem = ""
   },
   cancel(item){
    item.title = this.beforeTitle;
    this.editItem = "";
    this.beforeTitle = ""
   }
 }

还有计算属性

computed:{
  unCheckedLength(){
   return this.list.filter(function(item){
    return item.isChecked == false
   }).length
  },
  filteredList(){   
   return filter[this.visibility] ? filter[this.visibility](this.list) : list
 }
}

观察属性

watch:{
  list:{
   handler:function(){
    store.save("todolist",this.list)
   },
   deep:true
  }
}

自定义属性

directives:{
  "focus":{         
   update(el,binding){
    if(binding.value){
     el.focus()
    }

   }
  }
}

在HTML中要绑定这些数据,Vue也提供了一套指令:

v-bind绑定一个或多个特性,一般用于绑定class和style, v-on 绑定事件, v-show,v-if都是根据条件渲染元素,v-for是渲染列表…等等,我就不一一赘述了。可以去Vue中文官网看,讲的很详细。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 1.0.2
Oct 11 Javascript
javascript小数计算出现近似值的解决办法
Feb 06 Javascript
编写Js代码要注意的几条规则
Sep 10 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
Dec 26 Javascript
javascript实现对表格元素进行排序操作
Nov 18 Javascript
JS模仿手机端九宫格登录功能实现代码
Apr 28 Javascript
JS中关于正则的巧妙操作
Aug 31 Javascript
Node.js实现注册邮箱激活功能的方法示例
Mar 23 Javascript
微信小程序 wepy框架与iview-weapp的用法详解
Apr 10 Javascript
vue App.vue中的公共组件改变值触发其他组件或.vue页面监听
May 31 Javascript
vue实现瀑布流组件滑动加载更多
Mar 10 Javascript
vue路由分文件拆分管理详解
Aug 13 Javascript
bootstrap table表格使用方法详解
Apr 26 #Javascript
node.js中实现kindEditor图片上传功能的方法教程
Apr 26 #Javascript
windows下vue-cli导入bootstrap样式
Apr 25 #Javascript
windows下vue-cli及webpack搭建安装环境
Apr 25 #Javascript
Vue+axios 实现http拦截及路由拦截实例
Apr 25 #Javascript
vuejs如何配置less
Apr 25 #Javascript
微信小程序访问node.js接口服务器搭建教程
Apr 25 #Javascript
You might like
PhpMyAdmin中无法导入sql文件的解决办法
2010/01/08 PHP
PHP使用Redis实现Session共享的实现示例
2019/05/12 PHP
JQuery Tips(2) 关于$()包装集你不知道的
2009/12/14 Javascript
在浏览器中获取当前执行的脚本文件名的代码
2011/07/19 Javascript
JavaScript判断DOM何时加载完毕的技巧
2012/11/11 Javascript
利用a标签自动解析URL分析网址实例
2014/10/20 Javascript
c#+jquery实现获取radio和checkbox的值
2020/09/12 Javascript
javascript使用smipleChart实现简单图表
2015/01/02 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
js文字横向滚动特效
2015/11/11 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
2017/06/04 Javascript
Vue学习笔记进阶篇之过渡状态详解
2017/07/14 Javascript
使用vue.js在页面内组件监听scroll事件的方法
2018/09/11 Javascript
Vue源码学习之关于对Array的数据侦听实现
2019/04/23 Javascript
vue+element-ui+axios实现图片上传
2019/08/20 Javascript
node解析修改nginx配置文件操作实例分析
2019/11/06 Javascript
JS自定义滚动条效果
2020/03/13 Javascript
python常规方法实现数组的全排列
2015/03/17 Python
谈谈如何手动释放Python的内存
2016/12/17 Python
python爬虫headers设置后无效的解决方法
2017/10/21 Python
python散点图实例之随机漫步
2018/08/27 Python
python try except 捕获所有异常的实例
2018/10/18 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
2019/09/10 Python
Python 炫技操作之合并字典的七种方法
2020/04/10 Python
详解python安装matplotlib库三种失败情况
2020/07/28 Python
CSS3实现曲线阴影和翘边阴影
2016/05/03 HTML / CSS
JAVA代码查错题
2014/10/10 面试题
车工岗位职责
2013/11/26 职场文书
致1500米运动员广播稿
2014/02/07 职场文书
数学教学随笔感言
2014/02/17 职场文书
股指期货心得体会
2014/09/13 职场文书
2014最新党员批评与自我批评材料
2014/09/24 职场文书
同学会邀请函模板
2015/01/30 职场文书
电话营销开场白
2015/05/29 职场文书
2015年安全生产月工作总结
2015/07/27 职场文书
「月刊Comic Alive」2022年5月号封面公开
2022/03/21 日漫