浏览器本地存储:sessionStorage和localStorage,Vue本地存储数据

 

cookie: cookie生命期为只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。 存放数据大小为4K左右, 有个数限制(各浏览器不同),一般不能超过20个。缺点是不能储存大数据且不易读取

localStorage:生命周期是永久的,关闭页面或浏览器之后 localStorage 中的数据也不会消失。localStorage 除非主动删除数据,否则数据永远不会消失

sessionStorage: 生命周期是仅在当前会话下有效。sessionStorage 引入了一个“浏览器窗口”的概念,sessionStorage 是在同源的窗口中始终存在的数据。只要这个浏览器窗口没有关闭,即使刷新页面或者进入同源另一个页面,数据依然存在。但是 sessionStorage 在关闭了浏览器窗口后就会被销毁。同时独立的打开同一个窗口同一个页面,sessionStorage 也是不一样的.

保留sessionStorage的操作
    1.刷新当前页面,
    2.(同域) location.href、window.open、或者通过带target="_blank"的a标签打开新标签,之前的sessionStorage还在,注意新打开的标签中的sessionStorage和原页面中的sessionStorage, 不再相互影响,相互独立的

丢失sessionStorage的操作:
    主动打开一个新窗口或者新标签

localStorage

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>localStorage</title>
	</head>
	<body>
		<h2>localStorage</h2>
		<button onclick="saveData()">点我保存一个数据</button>
		<button onclick="readData()">点我读取一个数据</button>
		<button onclick="deleteData()">点我删除一个数据</button>
		<button onclick="deleteAllData()">点我清空一个数据</button>

		<script type="text/javascript" >
			let p = {name:'张三',age:18}

			function saveData(){
				localStorage.setItem('msg','hello!!!')
				localStorage.setItem('msg2',666)
				localStorage.setItem('person',JSON.stringify(p))
			}
			function readData(){
				console.log(localStorage.getItem('msg'))
				console.log(localStorage.getItem('msg2'))

				const result = localStorage.getItem('person')
				console.log(JSON.parse(result))

				// console.log(localStorage.getItem('msg3'))
			}
			function deleteData(){
				localStorage.removeItem('msg2')
			}
			function deleteAllData(){
				localStorage.clear()
			}
		</script>
	</body>
</html>

sessionStorage

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>sessionStorage</title>
	</head>
	<body>
		<h2>sessionStorage</h2>
		<button onclick="saveData()">点我保存一个数据</button>
		<button onclick="readData()">点我读取一个数据</button>
		<button onclick="deleteData()">点我删除一个数据</button>
		<button onclick="deleteAllData()">点我清空一个数据</button>

		<script type="text/javascript" >
			let p = {name:'张三',age:18}

			function saveData(){
				sessionStorage.setItem('msg','hello!!!')
				sessionStorage.setItem('msg2',666)
				sessionStorage.setItem('person',JSON.stringify(p))
			}
			function readData(){
				console.log(sessionStorage.getItem('msg'))
				console.log(sessionStorage.getItem('msg2'))

				const result = sessionStorage.getItem('person')
				console.log(JSON.parse(result))

				// console.log(sessionStorage.getItem('msg3'))
			}
			function deleteData(){
				sessionStorage.removeItem('msg2')
			}
			function deleteAllData(){
				sessionStorage.clear()
			}
		</script>
	</body>
</html>

Vue本地存储数据

关键代码

data() {
 return {
  //由于todos是MyHeader组件和MyFooter组件都在使用,所以放在App中(状态提升)
  todos:JSON.parse(localStorage.getItem('todos')) || []
 }
},
watch: {
 todos:{
  deep:true,
  handler(value){
   localStorage.setItem('todos',JSON.stringify(value))
  }
 }
},
<script>
	import MyHeader from './components/MyHeader'
	import MyList from './components/MyList'
	import MyFooter from './components/MyFooter.vue'

	export default {
		name:'App',
		components:{MyHeader,MyList,MyFooter},
		data() {
			return {
				//由于todos是MyHeader组件和MyFooter组件都在使用,所以放在App中(状态提升)
				todos:JSON.parse(localStorage.getItem('todos')) || []
			}
		},
		methods: {
			//添加一个todo
			addTodo(todoObj){
				this.todos.unshift(todoObj)
			},
			//勾选or取消勾选一个todo
			checkTodo(id){
				this.todos.forEach((todo)=>{
					if(todo.id === id) todo.done = !todo.done
				})
			},
			//删除一个todo
			deleteTodo(id){
				this.todos = this.todos.filter( todo => todo.id !== id )
			},
			//全选or取消全选
			checkAllTodo(done){
				this.todos.forEach((todo)=>{
					todo.done = done
				})
			},
			//清除所有已经完成的todo
			clearAllTodo(){
				this.todos = this.todos.filter((todo)=>{
					return !todo.done
				})
			}
		},
		watch: {
			todos:{
				deep:true,
				handler(value){
					localStorage.setItem('todos',JSON.stringify(value))
				}
			}
		},
	}
</script>

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以在 Vuex 中定义两个模块,分别处理存储到 sessionStoragelocalStorage 中的数据。 首先,在 `store.js` 中引入 `vuex` 和 `vuex-persistedstate`: ```javascript import Vue from 'vue' import Vuex from 'vuex' import createPersistedState from 'vuex-persistedstate' Vue.use(Vuex) ``` 然后,定义两个模块 `sessionStorage` 和 `localStorage`: ```javascript const sessionStorageModule = { namespaced: true, state: { data: null }, mutations: { setData (state, data) { state.data = data } }, plugins: [ createPersistedState({ storage: window.sessionStorage, reducer: state => ({ data: state.data }) }) ] } const localStorageModule = { namespaced: true, state: { data: null }, mutations: { setData (state, data) { state.data = data } }, plugins: [ createPersistedState({ storage: window.localStorage, reducer: state => ({ data: state.data }) }) ] } const store = new Vuex.Store({ modules: { sessionStorage: sessionStorageModule, localStorage: localStorageModule } }) export default store ``` 这里使用了 `vuex-persistedstate` 插件来实现将数据持久化到 sessionStoragelocalStorage 中。在定义模块时,通过 `plugins` 配置项将插件应用到模块上。`reducer` 函数指定了需要持久化的数据。 接下来,就可以在组件中通过 `mapMutations` 辅助函数来调用 mutations 了: ```javascript import { mapMutations } from 'vuex' export default { methods: { ...mapMutations('sessionStorage', ['setDataToSessionStorage']), ...mapMutations('localStorage', ['setDataToLocalStorage']), saveData () { // 保存数据sessionStoragelocalStorage this.setDataToSessionStorage(this.data) this.setDataToLocalStorage(this.data) } } } ``` 以上代码中,通过 `mapMutations` 辅助函数将 `setData` mutation 映射为 `setDataToSessionStorage` 和 `setDataToLocalStorage` 方法,以便在组件中使用。在 `saveData` 方法中,调用这两个方法即可将数据保存到 sessionStoragelocalStorage 中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值