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的getYear、getFullYear、getUTCFullYear异同分享
Nov 30 Javascript
JQuery select控件的相关操作实现代码
Sep 14 Javascript
基于JQuery实现的图片自动进行缩放和裁剪处理
Jan 31 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
Jun 19 Javascript
JS判断元素是否在数组内的实现代码
Mar 30 Javascript
浅谈jQuery双事件多重加载的问题
Oct 05 Javascript
ionic开发中点击input时键盘自动弹出
Dec 23 Javascript
Vue入门之animate过渡动画效果
Apr 08 Javascript
Vue.js 实现微信公众号菜单编辑器功能(一)
May 08 Javascript
最简单的vue消息提示全局组件的方法
Jun 16 Javascript
vue中实现回车键登录功能
Feb 19 Javascript
javascript实现滚轮轮播图片
Dec 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
PHP判断变量是否为0的方法
2014/02/08 PHP
推荐一本PHP程序猿都应该拜读的书
2014/12/31 PHP
php中注册器模式类用法实例分析
2015/11/03 PHP
学习php设计模式 php实现建造者模式
2015/12/07 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
laravel框架中间件 except 和 only 的用法示例
2019/07/12 PHP
js 操作select和option常用代码整理
2012/12/13 Javascript
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
Nodejs sublime text 3安装与配置
2014/06/19 NodeJs
jQuery.lazyload+masonry改良图片瀑布流代码
2014/06/20 Javascript
详解JavaScript正则表达式中的global属性的使用
2015/06/16 Javascript
jquery实现表格隔行换色效果
2015/11/19 Javascript
JavaScript的this关键字的理解
2016/06/18 Javascript
jquery Ajax 全局调用封装实例详解
2017/01/16 Javascript
使用JavaScript根据图片获取条形码的方法
2017/07/04 Javascript
JS实现图片转换成base64的各种应用场景实例分析
2018/06/22 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
2019/05/17 jQuery
flexible.js实现移动端rem适配方案
2020/04/07 Javascript
[01:00:54]TI4正赛第二日开场
2014/07/20 DOTA
Python学习资料
2007/02/08 Python
手动实现把python项目发布为exe可执行程序过程分享
2014/10/23 Python
python3实现爬取淘宝美食代码分享
2018/09/23 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
Django结合ajax进行页面实时更新的例子
2019/08/12 Python
Python 函数用法简单示例【定义、参数、返回值、函数嵌套】
2019/09/20 Python
最小二乘法及其python实现详解
2020/02/24 Python
python 录制系统声音的示例
2020/12/21 Python
什么是servlet链?
2014/07/13 面试题
党员自我对照检查材料
2014/08/19 职场文书
2014年电厂工作总结
2014/12/04 职场文书
交通肇事罪辩护词
2015/05/21 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书
晚会开幕词范文
2016/03/04 职场文书
Java异常处理try catch的基本用法
2021/12/06 Java/Android
什么是Python装饰器?如何定义和使用?
2022/04/11 Python
vscode内网访问服务器的方法
2022/06/28 Servers