Vue中使用LocalStorage和SessionStorage

LocalStorage和SessionStorage

在使用之前,我们先废话的了解一下LocalStorage和SessionStorage

1.sessionStorage(临时存储):为没一个数据维持一个存储区域,浏览器打开会创建,关闭浏览器就会消失。

2.localStorage(长期存储):和前者一样,区别在于浏览器关闭后数据依然存在。

因为两者差不多,所以我已localStorage为例

localStorage使用方法

保存

保存到localStorage,如果保存的是个对象,那么需要把数据转换为JSON格式,字符则不需要

1
2
3
4
5
6
7
8
9
10
11
12
/*保存*/
/*对象*/
var user = {
name : 'admin',
password: 'password'
}
/*字符*/
var str = 'hello';

localStorage.setItem("user",JSON.stringify(user)); //需要先转换为JSON

localStorage.setItem("hello",JSON.stringify(str));

获取

1
2
3
4
5
/*对象*/
var user = localStorage.getItem("user"); //现在user是一个字符串
//如果需要读取user中对象则需要把user转换为一个对象
user = JSON.parse(user);
name = user.name

删除

1
2
3
4
/*指定删除*/
localStorage.remove("user");
/*全部删除*/
localStorage.clear();

浏览器查看

Vue中实现用例

本例中以登录为例,使用了Element-UI。

首先创建一个登录页面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<template>
<div class="hello">
<el-form ref="form" :model="form" label-width="80px">
<el-form-item label="姓名:">
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-form-item label="密码:">
<el-input v-model="form.pwd"></el-input>
</el-form-item>
<el-form-item>
<el-button @click="login()">登录</el-button>
</el-form-item>
</el-form>
</div>
</template>

<script>
export default {
name: 'HelloWorld',
data() {
return {
form: {
name: "",
pwd: ""
}
}
},
methods: {
login() {
if ((this.form.name == "admin") && (this.form.pwd == "123")) {
var user = JSON.stringify(this.form);
this.$message({
message: '恭喜你,登录成功!',
type: 'success'
});
localStorage.setItem("user", user);
this.$router.push({
path: '/index'
})
} else {
this.$message("用户名或密码错误!");
}
}
}
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.hello {
width: 50%;
margin: 0 auto;
}
</style>

然后是登录成功之后的页面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<template>
<div>
<el-row v-if="name!=''">
<el-col :span="3">欢迎您:</el-col>
<el-col :span="4">{{name}}!</el-col>
<a @click="loginout()">注销</a>
</el-row>
<el-row v-else>
<el-col :span="3">您还未登录!</el-col>
</el-row>

</div>
</template>

<script>
export default {
name: 'HelloWorld',
data() {
return {
msg: "",
name: ""
}
},
created() {
this.checkLogin()
},
methods: {
checkLogin() {
var user = JSON.parse(localStorage.getItem("user"));
if (user) {
this.name = user.name
}
},
loginout() {
localStorage.removeItem("user")
this.$message({
message: '注销成功!',
type: 'success'
});
this.$router.push({
path: "/"
})
}
}
}
</script>

<style>
.el-col {
font-size: 20px;
}
</style>

配置路由:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import index from '@/components/index'


Vue.use(Router)

export default new Router({
mode: "history",
routes: [{
path: "/index",
name: "index",
component: index
},
{
path: '/',
name: 'HelloWorld',
component: HelloWorld,

}
]
})

展示

登录页面

登录成功后