vue实现todolist单页面应用


Posted in Javascript onApril 11, 2017

刚学习vue的小伙伴不知道从哪入手,很多网上的教程一来就搭建脚手架环境,可以新手更本看不懂,建议还是用引入script的方式引入vue.js,然后看官网的教程,再拿那这个demo练练手,也可以看看官网的demo,然后再去熟悉安装,搭建单页面应用。

效果:

vue实现todolist单页面应用

功能:

在input输入文字点击按钮或者enter,下面会添加一个带复选框和文字还有删除按钮的li

用到的vue函数:

data,methods,watch,还有localstorage

页面非常简单:

先写外面的盒子,这里用到v-model双向绑定input的值和js里的inputValue

<div id="vue-todolist" class="todolistDiv">
  <span> todolist</span>
  <input class="ipt" type="text" v-model="inputVaule" />
</div>

然后在js绑定:

var vm=new Vue({
 el: '#vue-todolist',
 data: { 
  inputVaule:""
 }
})

页面添加ul和button:

<div id="vue-todolist" class="todolistDiv">
  <span> todolist</span>
    <input class="ipt" type="text" v-model="inputVaule" v-on:keyup.enter="add"/>
    <button v-on:click="add" class="btn">add</button>
    <ul >
      <li v-for="item in items" >
      <div class="liDiv">       
        <label>{{item.text}}</label>      
      </div>
      </li>
    </ul>
  </div>

button的点击事件为methods里的add方法v-for就是遍历items数组,将item的text显示

js里的data要加上items,还要有methods:

var vm=new Vue({
 el: '#vue-todolist',
 data: { 
  items:[{text:'1'},{text:'2'}]
  inputVaule:""
 },
 methods:{
   add:function(){
    this.items.push({text:this.inputVaule});
    this.inputVaule="";
  }
 }
})

点击按钮时,就添加input的值到items数组,并重置值。这样view就自动更新li添加一项,因为数据变化页面也会实时更新,vue的好处开始浮现

在li加上checkbox和delete,再给items添加completed这个属性,代表完成没有,使用v-bind:class,意思是item.completed是true,那么就会使用complete这个class,如果false,就没有class,complete这个class我们可以设置字体red,便于识别。

<li v-for="item in items" >
      <div class="liDiv">
        <input type="checkbox" v-model="item.completed">
        <label v-bind:class="{ complete:item.completed }">{{item.text}}</label>
        <button v-on:click="removeTodo(item)" class="btn">x</button>
      </div>
</li>

js这里添加了completed属性,还添加了removeTodo方法用于删除指定item:

var vm=new Vue({
 el: '#vue-todolist',
 data: { 
  items:[{text:'1',completed:true},{text:'2',completed:false}]
  inputVaule:""
 },
 methods:{
   add:function(){
    this.items.push({text:this.inputVaule});
    this.inputVaule="";
  },
  removeTodo: function (todo) {
   this.items.splice(this.items.indexOf(todo), 1)
  }
 }
})

现在已经完善的差不多了,可是我们发现,每次浏览器刷新,或者页面重新打开,我们新增加的li就会消失,那我们要保存我们添加的数据,要怎么做呢,很简单,html5为我们提供了localstorage这个东西,它保存数据在浏览器,使得页面刷新或者重新打开或者浏览器关闭也不会数据丢失。

我们一步步来看怎么实现

1.添加li时保存数据到localstorage:

var STORAGE_KEY = 'todos-vuejs'//名称
var todoStorage = { 
 save: function (todos) {
  localStorage.setItem(STORAGE_KEY, JSON.stringify(todos))
 }
}

很简单,调用setItem传入key和我们的items数组即可,这时候我们要用到watch函数了,去监视items数组,如果items数组有变化即添加或者删除,我们都自动调用todostorage的save方法

watch:{
  items:{
    handler:function(items){
      todoStorage.save(items)
    },
    deep:true//一定要加
  }
 }

我们打开浏览器的开发者选项的dom,然后添加几个li,可以看到localstorage里面已经保存了todos-vuejs,里面保存了我们添加的item数据

2.数据保存到浏览器的localstorage后,我们的items数组的数组源是不是也应该设置为localstorage的呢

添加fetch方法

var STORAGE_KEY = 'todos-vuejs'//名称
var todoStorage = {
 fetch: function () {
  var todos = JSON.parse(localStorage.getItem(STORAGE_KEY) || '[]')
  todos.forEach(function (todo, index) {
   todo.id = index
  })
  todoStorage.uid = todos.length
  return todos
 },
 save: function (todos) {
  localStorage.setItem(STORAGE_KEY, JSON.stringify(todos))
 }
}

还有我们data里的items:

data: {
  items:todoStorage.fetch(),//直接从localstroage拿数据
  inputVaule:""
 },

到这里功能就齐全了,小伙伴可以再添加更多的功能,比如全部删除等,

最后附上源码https://github.com/gdmec07140603/todolist.git

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

Javascript 相关文章推荐
jquery 模式对话框终极版实现代码
Sep 28 Javascript
js对象的比较
Feb 26 Javascript
jQuery中.live()方法的用法深入解析
Dec 30 Javascript
JavaScript中自定义事件用法分析
Dec 23 Javascript
jQuery中outerHeight()方法用法实例
Jan 19 Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
Nov 04 Javascript
js弹出对话框方式小结
Nov 17 Javascript
详解如何使用webpack打包Vue工程
May 27 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
Jan 18 Javascript
Angular ng-animate和ng-cookies用法详解
Apr 18 Javascript
JS高级技巧(简洁版)
Jul 29 Javascript
JavaScript 禁止用户保存图片的实现代码
Apr 28 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
Apr 11 #Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
Apr 11 #Javascript
javascript数组去重常用方法实例分析
Apr 11 #Javascript
JS实现针对给定时间的倒计时功能示例
Apr 11 #Javascript
vuejs绑定class和style样式
Apr 11 #Javascript
vue监听滚动事件实现滚动监听
Apr 11 #Javascript
jQuery插件FusionCharts绘制的2D双面积图效果示例【附demo源码】
Apr 11 #jQuery
You might like
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
2008/09/10 PHP
javascript Onunload与Onbeforeunload使用小结
2009/12/31 Javascript
js拦截alert对话框另类应用
2013/01/16 Javascript
js中的this关键字详解
2013/09/25 Javascript
jqGrid日期格式的判断示例代码(开始日期与结束日期)
2013/11/08 Javascript
JavaScript中的迭代器和生成器详解
2014/10/29 Javascript
javascript使用正则表达式检测IP地址
2014/12/03 Javascript
js实现百度联盟中一款不错的图片切换效果完整实例
2015/03/04 Javascript
使用js复制链接中的部分文字的方法
2015/07/30 Javascript
超全面的vue.js使用总结
2017/02/12 Javascript
使用JavaScriptCore实现OC和JS交互详解
2017/03/28 Javascript
深入理解JavaScript和TypeScript中的class
2018/04/22 Javascript
jQuery实现table表格checkbox全选的方法分析
2018/07/04 jQuery
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
JavaScript实现预览本地上传图片功能完整示例
2019/03/08 Javascript
node之本地服务器图片上传的方法示例
2019/03/26 Javascript
angular8和ngrx8结合使用的步骤介绍
2019/12/01 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
用Python登录Gmail并发送Gmail邮件的教程
2015/04/17 Python
Python制作刷网页流量工具
2017/04/23 Python
Python利用正则表达式实现计算器算法思路解析
2018/04/25 Python
利用Python实现微信找房机器人实例教程
2019/03/10 Python
python实现爬取百度图片的方法示例
2019/07/06 Python
Python3标准库之functools管理函数的工具详解
2020/02/27 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
在python3.9下如何安装scrapy的方法
2021/02/03 Python
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
英国女性时尚鞋类的潮流制造者:Koi Footwear
2018/10/19 全球购物
墨尔本最受欢迎的复古风格品牌:Princess Highway
2018/12/21 全球购物
幼儿园校车司机的岗位职责
2014/01/30 职场文书
就业意向协议书
2015/01/29 职场文书
2015年学生会纪检部工作总结
2015/03/31 职场文书
针对吵架老公保证书
2015/05/08 职场文书
初婚初育证明范本
2015/06/18 职场文书
MySQL 那些常见的错误设计规范,你都知道吗
2021/07/16 MySQL
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript