全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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中文官网看,讲的很详细。

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


# Vue  # Todo  # List  # vue.js实例todoList项目  # Vue.js实现一个todo-list的上移下移删除功能  # vue2的todolist入门小项目的详细解析  # 基于vuejs实现一个todolist项目  # vue实现todolist单页面应用  # vue实现ToDoList简单实例  # 利用vue写todolist单页应用  # Vue.js实现简单ToDoList 前期准备(一)  # 用vue的双向绑定简单实现一个todo-list的示例代码  # 绑定  # 要用  # 未完成  # 都是  # 我就  # 就会  # 还没有  # 放在  # 多个  # 在这  # 在此  # 就不  # 出现在  # 会在  # 它是  # 这是一个  # 要做  # 自定义  # 还不错  # 就用 


相关文章: 如何在IIS管理器中快速创建并配置网站?  小建面朝正北,A点实际方位是否存在偏差?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  家庭建站与云服务器建站,如何选择更优?  制作表格网站有哪些,线上表格怎么弄?  MySQL查询结果复制到新表的方法(更新、插入)  香港服务器网站推广:SEO优化与外贸独立站搭建策略  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  Android滚轮选择时间控件使用详解  官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站  网站制作网站,深圳做网站哪家比较好?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  ppt制作免费网站有哪些,ppt模板免费下载网站?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  如何选择域名并搭建高效网站?  香港服务器WordPress建站指南:SEO优化与高效部署策略  如何零成本快速生成个人自助网站?  如何彻底删除建站之星生成的Banner?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  Thinkphp 中 distinct 的用法解析  建站之星如何快速解决建站难题?  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  内网网站制作软件,内网的网站如何发布到外网?  ,怎么用自己头像做动态表情包?  如何自定义建站之星模板颜色并下载新样式?  制作销售网站教学视频,销售网站有哪些?  公司网站制作价格怎么算,公司办个官网需要多少钱?  如何通过.red域名打造高辨识度品牌网站?  如何通过WDCP绑定主域名及创建子域名站点?  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  如何快速生成可下载的建站源码工具?  网站制作壁纸教程视频,电脑壁纸网站?  公司门户网站制作流程,华为官网怎么做?  哈尔滨网站建设策划,哈尔滨电工证查询网站?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  专业商城网站制作公司有哪些,pi商城官网是哪个?  宝塔Windows建站如何避免显示默认IIS页面?  如何快速搭建响应式可视化网站?  如何高效利用亚马逊云主机搭建企业网站?  高防服务器租用首荐平台,企业级优惠套餐快速部署  广东企业建站网站优化与SEO营销核心策略指南  图册素材网站设计制作软件,图册的导出方式有几种?  如何构建满足综合性能需求的优质建站方案?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  如何通过VPS建站实现广告与增值服务盈利?  建设网站制作价格,怎样建立自己的公司网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。