下面渲染数据。
刷新后就没有数据了,需要对数据进行缓存!
H5中有localstogry可以进行缓存。
改变后的数据没有存入localstogy中.
备份localstory,进行封装;
对localStorage进行封装;
(一)、未添加缓存数据之前,数据会丢失;
<template>
<div id="app">
<input type="text" v-model='todo'/>
<button @click="doAdd()">+增加</button>
<br>
<h2>进行中</h2>
<template v-for="(item,key) in list" :key="item">
<h-tab-pane v-if="item.checked">
<br>
<input type='checkbox' v-model='item.checked'>{{item.title}}---
<button @click="removeData(key)">删除</button>
</h-tab-pane>
</template>
<br>
<h2>已完成</h2>
<template v-for="(item,key) in list" :key="item">
<h-tab-pane v-if="!item.checked">
<input type="checkbox" v-model='item.checked'>{{item.title}}---
<button @click="removeData(key)">删除</button>
</h-tab-pane>
</template>
</div>
</template>
<script>
export default {
// name:"app",
data(){
return{
todo:'',
list:[]
}
},methods:{
doAdd(){
//1、获取文本框输入的值
//2、把文本框的值push到list里面
this.list.push({title:this.todo,checked:true});
},
removeData(key){
//splice js操作数组的方法
this.list.splice(key,1);
}
}
}
</script>
<style>
h-tab-pane{
background:red;
input{
background:green;
}
}
</style>
刷新前页面效果:
刷新页面后:
键盘事件监听:
<template>
<div id="app">
<input type="text" v-model='todo' @keydown="pressBoard($event)"/>
<h2>进行中</h2>
<template v-for="(item,key) in list" :key="item">
<h-tab-pane v-if="item.checked">
<input type='checkbox' v-model='item.checked'>{{item.title}}---
<button @click="removeData(key)">删除</button>
</h-tab-pane>
</template>
<h2>已完成</h2>
<template v-for="(item,key) in list" :key="item">
<h-tab-pane v-if="!item.checked">
<input type="checkbox" v-model='item.checked'>{{item.title}}---
<button @click="removeData(key)">删除</button>
</h-tab-pane>
</template>
</div>
</template>
<script>
export default {
// name:"app",
data(){
return{
todo:'',
list:[]
}
},methods:{
doAdd(){
//1、获取文本框输入的值
//2、把文本框的值push到list里面
this.list.push({title:this.todo,checked:true});
},
removeData(key){
//splice js操作数组的方法
this.list.splice(key,1);
},
pressBoard(e){
if(e.keyCode==13){
this.list.push({title:this.todo,checked:true});
this.todo='';
}
}
}
}
</script>
<style>
h-tab-pane{
background:red;
input{
background:green;
}
}
</style>
H5中有localstogry可以进行缓存。
<template>
<div id="app">
<input type="text" v-model='todo' @keydown="pressBoard($event)"/>
<!-- <button @click="doAdd()">+增加</button> -->
<h2>进行中</h2>
<template v-for="(item,key) in list" :key="item">
<h-tab-pane v-if="item.checked">
<input type='checkbox' v-model='item.checked'>{{item.title}}---
<button @click="removeData(key)">删除</button>
</h-tab-pane>
</template>
<h2>已完成</h2>
<template v-for="(item,key) in list" :key="item">
<h-tab-pane v-if="!item.checked">
<input type="checkbox" v-model='item.checked'>{{item.title}}---
<button @click="removeData(key)">删除</button>
</h-tab-pane>
</template>
</div>
</template>
<script>
export default {
// name:"app",
data(){
return{
todo:'',
list:[]
}
},
methods:{
doAdd(){
//1、获取文本框输入的值
//2、把文本框的值push到list里面
this.list.push({title:this.todo,checked:true});
//JSON.stringify(this.list) 将json对象转化为json字符串
localStorage.setItem('list',JSON.stringify(this.list));
},
removeData(key){
//splice js操作数组的方法
this.list.splice(key,1);
localStorage.setItem('list',JSON.stringify(this.list));
},
pressBoard(e){
if(e.keyCode==13){
this.list.push({title:this.todo,checked:true});
this.todo='';
}
localStorage.setItem('list',JSON.stringify(this.list));
}
},
mounted:function(){ // 生命周期函数,与data、methods 同级别 vue页面刷新就会触发的方法
//JSON.parse() 将json字符串转换为json对象
// eslint-disable-line no-unused-vars
var list = JSON.parse(localStorage.getItem('list'));
if(list){
//刷新页面。从缓存中获取数据返回给list
this.list=list;
}
}
}
</script>
<style>
h-tab-pane{
background:red;
input{
background:green;
}
}
</style>
刷新页面后,数据从页面缓存中获取,页面数据不会丢失;
<template>
<div id="app">
<input type="text" v-model='todo' @keydown="pressBoard($event)"/>
<h2>进行中</h2>
<template v-for="(item,key) in list" :key="item">
<h-tab-pane v-if="item.checked">
<br>
<input type='checkbox' v-model='item.checked' @change="saveList()">
{{item.title}}---<button @click="removeData(key)">删除</button>
</h-tab-pane>
</template>
<h2>已完成</h2>
<template v-for="(item,key) in list" :key="item">
<h-tab-pane v-if="!item.checked">
<br>
<input type="checkbox" v-model='item.checked' @change="saveList()">
{{item.title}}---<button @click="removeData(key)">删除</button>
</h-tab-pane>
</template>
</div>
</template>
<script>
export default {
// name:"app",
data(){
return{
todo:'',
list:[]
}
},
methods:{
doAdd(){
//1、获取文本框输入的值
//2、把文本框的值push到list里面
this.list.push({title:this.todo,checked:true});
//JSON.stringify(this.list) 将json对象转化为json字符串
localStorage.setItem('list',JSON.stringify(this.list));
},
removeData(key){
//splice js操作数组的方法
this.list.splice(key,1);
localStorage.setItem('list',JSON.stringify(this.list));
},
pressBoard(e){
if(e.keyCode==13){
this.list.push({title:this.todo,checked:true});
this.todo='';
}
localStorage.setItem('list',JSON.stringify(this.list));
},
saveList(){
localStorage.setItem('list',JSON.stringify(this.list));
}
},// 生命周期函数,与data、methods 同级别 vue页面刷新就会触发的方法
mounted:function(){
//JSON.parse() 将json字符串转换为json对象
// eslint-disable-line no-unused-vars
var list = JSON.parse(localStorage.getItem('list'));
if(list){
//刷新页面。从缓存中获取数据返回给list
this.list=list;
}
}
}
</script>
<style>
h-tab-pane{
background:red;
input{
background:green;
}
}
</style>
下面对重复代码进行封装。
封装的storage.js:
路径:src/model/storage.js
//在src下创建model文件夹,model文件夹中创建storage.js文件
//用到了node js 基础
var storage = {
set(key,value){
localStorage.setItem(key,JSON.stringify(value));
},
get(key){
return JSON.parse(localStorage.getItem(key));
},
remove(key){
localStorage.remove(key);
}
}
//通过export default将storage暴漏出去
export default storage;
<template>
<div id="app">
<input type="text" v-model='todo' @keydown="pressBoard($event)"/>
<h2>进行中</h2>
<template v-for="(item,key) in list" :key="item">
<h-tab-pane v-if="item.checked">
<br>
<input type='checkbox' v-model='item.checked'
@change="saveList()">{{item.title}}---
<button @click="removeData(key)">删除</button>
</h-tab-pane>
</template>
<h2>已完成</h2>
<template v-for="(item,key) in list" :key="item">
<h-tab-pane v-if="!item.checked">
<input type="checkbox" v-model='item.checked' @change="saveList()">
{{item.title}}---<button @click="removeData(key)">删除</button>
</h-tab-pane>
</template>
</div>
</template>
<script>
//script中引入暴漏的storage
import storage from './model/storage.js'
console.log(storage);
export default {
// name:"app",
data(){
return{
todo:'',
list:[]
}
},
methods:{
doAdd(){
//1、获取文本框输入的值
//2、把文本框的值push到list里面
this.list.push({title:this.todo,checked:true});
//JSON.stringify(this.list) 将json对象转化为json字符串
storage.set('list',JSON.stringify(this.list));
},
removeData(key){
//splice js操作数组的方法
this.list.splice(key,1);
storage.set('list',JSON.stringify(this.list));
},
pressBoard(e){
if(e.keyCode==13){
this.list.push({title:this.todo,checked:true});
this.todo='';
}
storage.set('list',JSON.stringify(this.list));
},
saveList(){
storage.set('list',JSON.stringify(this.list));
}
}, // 生命周期函数,与data、methods 同级别 vue页面刷新就会触发的方法
mounted:function(){ //JSON.parse() 将json字符串转换为json对象
// eslint-disable-line no-unused-vars
var list = storage.get('list');
if(list){
//刷新页面。从缓存中获取数据返回给list
this.list=list;
}
}
}
</script>
<style>
h-tab-pane{
background:red;
input{
background:green;
}
}
</style>
错误:‘x‘ is assigned a value but never used no-unused-vars
报错:
97:21 error ‘count’ is assigned a value but never used no-unused-vars
✖ 1 problem (1 error, 0 warnings)
发生原因:
发生这种情况是因为eslint的验证语法,您正在定义x但未使用它。
解决方法如下:
只需将其删除
在错误代码后加入该行注释就行:
// eslint-disable-line no-unused-vars
修改后为:
let count = 10000 // eslint-disable-line no-unused-vars
this.$nextTick(function() {
console.log('DOM 更新了 ’ )
})
原文链接:https://blog.csdn.net/xiaoyuer_2020/article/details/110429773