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 相关文章推荐
javascript实现将文件保存到本地方法汇总
Jul 26 Javascript
jQuery实现文件上传进度条特效
Aug 12 Javascript
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
Oct 29 Javascript
基于jQuery实现仿QQ空间送礼物功能代码
May 24 Javascript
简单实现jQuery弹幕效果
May 06 jQuery
一个可复用的vue分页组件
May 15 Javascript
js实现简单模态框实例
Nov 16 Javascript
vue计算属性computed的使用方法示例
Mar 13 Javascript
简单学习5种处理Vue.js异常的方法
Jun 17 Javascript
微信小程序封装分享与分销功能过程解析
Aug 13 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
Sep 23 Javascript
微前端qiankun改造日渐庞大的项目教程
Jun 21 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
通过ODBC连接的SQL SERVER实例
2006/10/09 PHP
PHP 图片水印类代码
2012/08/27 PHP
php while循环得到循环次数
2013/10/26 PHP
PHP统计目录中文件以及目录中目录大小的方法
2016/01/09 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
2016/10/10 PHP
基于jquery的分页控件(C#)
2011/01/06 Javascript
基于jQuery实现的水平和垂直居中的div窗口
2011/08/08 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
JS实现双击屏幕滚动效果代码
2015/10/28 Javascript
jquery+json实现分页效果
2016/03/07 Javascript
深入浅析JavaScript中数据共享和数据传递
2016/04/25 Javascript
JavaScript的ExtJS框架中表格的编写教程
2016/05/21 Javascript
js中通过getElementsByName访问name集合对象的方法
2016/10/31 Javascript
vue.js配合$.post从后台获取数据简单demo分享
2018/08/11 Javascript
node.js中express模块创建服务器和http模块客户端发请求
2019/03/06 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
Python中的yield浅析
2014/06/16 Python
利用Python读取文件的四种不同方法比对
2017/05/18 Python
Python实现的查询mysql数据库并通过邮件发送信息功能
2018/05/17 Python
Python基本数据结构之字典类型dict用法分析
2019/06/08 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
python 简单的调用有道翻译
2020/11/25 Python
英国网上购买门:Direct Doors
2018/06/07 全球购物
什么是TCP/IP
2014/07/27 面试题
在职人员函授期间自我评价分享
2013/11/08 职场文书
求职信写作要突出重点
2014/01/01 职场文书
运动会入场解说词300字
2014/01/25 职场文书
工作评语大全
2014/04/26 职场文书
英语一分钟演讲稿
2014/04/29 职场文书
学雷锋志愿者活动总结
2014/06/27 职场文书
公司周年庆典标语
2014/10/07 职场文书
2014年高二班主任工作总结
2014/12/16 职场文书
营业员岗位职责范本
2015/04/14 职场文书
青年教师听课心得体会
2016/01/15 职场文书
Promise面试题详解之控制并发
2021/05/14 面试题
JS前端使用canvas实现扩展物体类和事件派发
2022/08/05 Javascript