#WebStorage #cookie #VUEX

一. Web Storage

Web Storage提供了一种比Cookie更加直观的存储方式来存储键/值对
web storage 提供了两种存储机制:
localstorage   :为每个特定的源提供独立的存储区域,该区域内存储的数据在所有页面有效,即使关闭掉也会有
sessionstorage :为每个特定的源提供独立的存储区域,该区域存储的数据只在当前页面有效

这两同机制可以通过window.sessionStorage 和 window.localstorage  属性进行访问  (完全相同的属性和方法)

在这里插入图片描述

四个方法:
setItem()   //方法
存储指定的值到键名,如果键名存在,自动更新键值
window.localstorage.setItem("键名","键值")
window.sessionStorage.setItem("键名","键值")

在这里插入图片描述
在这里插入图片描述

getItem()   //方法
用于返回对应键名的值,如果键名不存在,则返回null,其语法结构是: 

window.localStorage.getItem("键名")
window.sessionStorage.getItem("键名")

removeItem()   //方法
用于删除指定的键名,其语法结构是:

window.localStorage.removeItem("键名")
window.sessionStorage.removeItem("键名")
clear()方法
用于删除所有的webStorage中存储的数据项,其语法结构是:

window.localStorage.clear()
window.sessionStorage.clear()
length属性
length属性用于获取WebStorage中存储的数据项的数量,其语法结构是:

variable = window.localStorage.length
ariable = window.sessionStorage.length

二. cookie

document.cookie属性既可以设置cookie,也可以获取cookie,其语法结构是:

//获取
variable = document.cookie

//设置
document.cookie = '名=值;expires=生命周期;path=路径'
expires参数需要使用格林尼治日期的表示形式,可通过Date对象的相关方法实现。
path表示cookie生效的路径,假设写为/a则表示只在a及其子目录中被访问到
清理cookie时需要再行设置cookie,只不过cookie的生命周期为当前日期的向前推算。

localStorage 一直都存在 除非手动清理
sessionStorage 关闭浏览器就会清除
cookie 可以设置生命周期

三. vuex

vuex本质就是一个vue的插件,它是专门为vue.js的应用程序开发的状态管理模式,采用集中式的管理方式:


比如:假设 a.vue b.vue c.vue d.vue  有一个username的变量,每个组件里都需要使用,如果每个页面都去声明一份是可以的,但是又两个问题,
维护起来比较麻烦,更改之后也办法让其他的也变同时修改


解决:vuex保存username的变量,所有调用这个变量的页面组件,自然会发生变化,类似CSS选择器 
常见的状态有:
(1)用户的登录状态
(2)购物车信息
安装:在安装vue脚手架里选择vuex特性;
npm安装:  npm install --save vuex

在这里插入图片描述

使用:
Vuex的状态存储在   src/store/index.js
vuex与全局变量有以下两个不同:
1.vuex的状态是响应式的
2.不能改变状态 而只能修改提交
结构:

import vue from "vue";
import vuex from vuex;
//vuex是作为vue的插件出现的
export default new vuex.store({//每一个vuex应用的核心是store,存储了vuex所有的状态
  state: {     //物品
  //定义了应用状态的数据结构,其数据类型可为string,number,boolean,array,object等
  },
  getters:{    //记账员
  //vue允许在store定义getters(可以认为store的计算属性),getters的返回值会被缓存起来.只有以来发生变化时候,才能重新计算
  	属性(方法)名称:(state){  //state可以省略掉,因为函数或方法不是必须带有参数,但在实践过程中state参数不可能省略掉,因为getters的作用任务 store的计算属性,既然是计算属性,必须存在依赖,该参数合法名称,任何命名都代表当前store中的所有state
	
	}
  },
  mutations: {  //搬运工
  //    //改变状态的唯一实现方式
  	方法名称(state,paylodd){  //payload称为载荷,指mutations中所传递的额外的参数,可以为任意数据类型。

	}
  },  
  actions: {    //拉货  作用与mutations类似,但区别在于,mutations不能产生异步操作,actions可以产生异步
  	方法名称(context,payload){
	
	}
  },
  modules: {
  }
})

在这里插入图片描述

组件中访问vuex中的state:
页面输出:{{this.$store.state.xxx}};
脚本数据:不需要{{}}
组件文件访问Vuex中的getters:
{{this.$store.getters.xxx}}
组件中访问vuex中的mutations:
脚本输出:this.$store.commit("方法名称")
组件中访问vuex中的Actions
this.$store.dispatch(方法名称)

store index.js
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Vuex中的辅助函数
为什么需要辅助函数?
A.将在页面组件中书写的大量的语句代码变得简短

B.可以为Vuex的state、getters、mutations、actions赋予别名
•mapState()
•mapGetters()
•mapMutations()
•mapActions()

使用辅助函数


mapState()函数
import {mapState} from 'vuex';
mapState()函数用于为组件页面创建计算属性以返回Vuex 中store内的state,也就是说,其把vuex中的state来作为当前页面组件的计算属性来使用,其语法结构是://计算属性
computed:{
	...mapState(数组|对象)
}
 示例代码如下:
 import {maxState} from 'vuex';
 computed:{...mapState([
    'username',
    'age',
    'sex',
    'salary',
    'products'
	 ])
}
在页面组件中使用时直接进行相关的访问即可,示例代码如下:
姓名:{{username}}
示例代码如下:
import {maxState} from 'vuex';
computed:{{...mapState({
extension:'extends'
    })
}

mapGetters()函数
import {mapGetters} from 'vuex';
mapGetters()函数是为组件创建计算属性以返回Vuex中getters的返回值,其语法结构是:
computed:{
...mapGetters(数组|对象)
}
示例代码如下:
import {mapGetters} from 'vuex';
computed:{//以数组形式访问getters
		  //...mapGetters(['getCounts'])
		  //以对象形式访问getters
		  ...mapGetters({
		  productNum:'getCounts'
		  })}

mapMutations()函数
import {mapMutations} from 'vuex';
mapMutations()函数用于为页面组件创建组件内的方法以提交mutation,也就是说,其把Vuex中的mutations内的方法作为当前页面组件的方法来使用,其语法结构是:
methods:{
...mapMutations(数组|对象)
}
示例代码如下:
import {mapMutations} from 'vuex';
methods:{
 ...mapMutations({
    plus:'increment',
    minus:'decrement'
   }),
   inc(){
   //提交Mutations
   //this.$store.commit('increment');
    this.plus();
    },
   dec(){
   //提交Mutations
   //this.$store.commit('decrement');
    this.minus();
      }
}

 

import {mapMutations} from 'vuex';
methods:{
...mapMutations(['addProduct']),
 add(){
  //构建对象,之所以要构建如下结构的对象,是因为在Mutations
  //中payload参数要添加到products数组的未尾,而products中包含的
  //对象如下,所以为了正常的可以进行遍历输出,故构建如下结构的对象 
   
 let obj = {
   productName:this.productName,
   salePrice:this.salePrice
   }
  //提交Mutations      
  //this.$store.commit('addProduct',obj);
    this.addProduct(obj);
   //路由跳转
   this.$router.push('/access1');
	 }
  }
 mapActions()函数
import {mapActions} from 'vuex';
mapAtions()函数用于为页面组件创建组件内的方法以分发action,也就是说,其把Vuex中的actions内的方法作为当前页面组件的方法来使用,其语法结构是:
...mapActions(数组|对象)

问题:共享数据,但是只要刷新页面,数据又会回到设定值
解决:web storage
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值