7、Vue Todolist双向数据绑定 3.0(带缓存)

2019-03-05  本文已影响0人  msqt

(刷新数据不丢失)


<template>
<div id="app">
<input type="text" v-model="todo" v-on:keydown="addObj2($event)">
<button @click="addObj()">+添加</button>



<ul>
<h3>已完成</h3>

<li v-for="(item,key) in todoList" v-if="item.isdo"><input type="checkbox" v-model="item.isdo" @change="Change()">{{item.todo}} <button @click="deleteObj(key)">删除</button></li>
</ul>


<ul>
<h3>未完成</h3>
<li v-for="(item,key) in todoList" v-if="!item.isdo" v-bind:class="{'Done':!item.isdo}"><input type="checkbox" v-model="item.isdo" @change="Change()">{{item.todo}} <button @click="deleteObj(key)">删除</button></li>
</ul>
<router-view/>
</div>
</template>

<script>
export default {
name: 'App',
data (){
return{
todo:'',
todoList:[],
isdo:true,
}
},
methods:{//用于放置自定义方法
addObj(){
if(!Object.is(this.todo,'')){
let obj={};
[obj.todo,obj.isdo]=[this.todo,this.isdo];
this.todoList.push(obj);
}
this.todo='';
localStorage.setItem('history',JSON.stringify(this.todoList));//将'this.list'以字符串的形式缓存在本地。
},addObj2(e){
if(e.keyCode===13){
let obj={};
[obj.todo,obj.isdo]=[this.todo,this.isdo];
this.todoList.push(obj);
this.todo='';
localStorage.setItem('history',JSON.stringify(this.todoList));
}
}
,deleteObj(key){
this.todoList.splice(key,1);//splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。
//arrayObject.splice(index,howmany,item1,.....,itemX):index 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。item1, ..., itemX 可选。向数组添加的新项目。
localStorage.setItem('history',JSON.stringify(this.todoList));
},Change(){
localStorage.setItem('history',JSON.stringify(this.todoList));
}
},mounted(){//生命周期函数(这个是页面刷新就会触发的函数)
let todoList = JSON.parse(localStorage.getItem('history'));//将缓存在本地的'history'字符串重新解析成对象。
if(todoList){//如果'list'存在,执行以下函数
this.todoList=todoList;
}
}
}
</script>

<style>

app {

font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: #2c3e50;
margin-top: 60px;
}
.Done{
background: #ccc;
}
</style>


image.png
上一篇下一篇

猜你喜欢

热点阅读