2.获取vuex中的数据
3.设置vuex中的数据
4.刷新之后,保留数据
数据结构
index.js
transaction.js模块
注意:namespaced是为了解决不同模块命名冲突的问题,分两种情况来写
获取vuex中的数据
设置vuex中的数据
如果将namespaced设置为false,则需要注意命名不能重复
也可以使用mapState,mapGetters,mapActions
安装
修改index.js配置,将数据保存到sessionStorage
vuex是在每个组件上注入this. store获取共享的状态,定义 *** 作state的方法。首先使用vue.use(vuex)表明vuex是vue的插件,只能被vue使用——实例化Store并传入参入——Store注入到根组件上。以上三个步骤便可以使用vuex实现数据在组件中的共享了。
当使用到vue.use的时候,会调用Store文件中的install方法,并可以获取到当前组件的执行期上下文。通过全局混合的方式,在每个组件上嵌入this.$store属性。
当Store类被实例化时,会执行constructor构造器并且传入option所需的参数,在对state、getters、mutations、actions编写。
1、实现state:理论上讲,直接把参数中的state赋值当前组件上即可,这样会引发一个问题,state的值无法动态改变。要使用state双向绑定可以直接使用vue实例中data方法,然后在通过get进行属性的截取。
2、实现getters:通过Ojbect.defineProperty监听getters值里面的变化,当获取值的时候,会触发get方法,返回并执行参数getters里面的方法。
3、实现mutations:把参数mutations里面的方法重新用一个变量去接收,作用是防止变量的全局污染。定义commit函数,当被执行时,触发定义mutaion对象里面的方法。
4、实现actions:方法同上,有个地方需要作出微调,传递的参数是当前的执行期上下文。
项目案例
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
如果一份数据需要在多个组件中使用,组件间传值又比较复杂,就可以使用vuex托管数据。
state选项: 定义状态(状态就是数据)。
mutations选项: 定义修改状态的方法(注意:这里面只能定义同步方法)。
$store: 返回的是当前项目中的全局状态对象。
commit()方法: 用于执行指定的mutations里面的方法。
在组件中,直接通过$store.state就可以获取到全局状态对象管理的状态数据,直接渲染到页面。
state选项: 定义状态(状态就是数据)。
通过 $store.state.数据名 使用。
getters选项: 定义计算属性。方法的参数是状态对象。
通过 $store.getters.属性名 使用计算属性。
mutations选项: 定义修改状态的方法(注意:这里的方法一般都是同步方法)。方法的第一个参数是状态对象,第二个参数是新值。
通过 commit() 方法,调用mutations里面的方法。
actions选项: 定义 *** 作状态的方法(这里的方法可以定义异步方法)。
注意: actions里的方法最好不要直接 *** 作state状态,而是通过调用mutations里面的方法去修改状态。所以,actions直接 *** 作的是mutations。
通过 dispatch() 方法,调用actions里面定义的方法。
由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。
为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块。
namespaced属性: 默认情况下,action、mutation 和 getter 是注册在全局命名空间的。通过设置namespaced属性为true,将action、mutation 和 getter全部注册到私有命名空间中。
要从私有模块中获取数据,方式是: $store.state.模块名称.模块的数据 。
要从私有模块中获取计算属性,方式是: $store.getters['模块名/计算属性'] 。
调用私有模块里面的mutations定义的方法,方式是: $store.commit('模块名/方法名',新值) 。
调用私有模块里面的actions定义的方法,方式是: $store.dispatch('模块名/方法名',新值) 。
直接在模板中使用全局状态管理数据,表达式会写的很长。所以可以使用计算属性。
通过映射函数mapState、mapGetters、mapActions、mapMutations,可以将vuex.store中的属性映射到vue实例身上,这样在vue实例中就能访问vuex.store中的属性了,便于 *** 作vuex.store。
如果vuex里面state的数据名称 跟 页面中的计算属性名称相同,就可以使用 mapState 映射函数,自动生成页面中的计算属性。
如果vuex里面getters的数据名称 跟 页面中的计算属性名称相同,就可以使用 mapGetters 映射函数,自动生成页面中的计算属性。
注意: 如果要映射模块里面的state/getters,函数的第一个参数设置为模块的名称。
如果定义的方法名跟全局管理对象中mutations里面的方法名相同,并且定义的方法会带有一个参数,通过参数传递数据。满足该规则,就可以使用 mapMutations 映射函数生成方法。
如果定义的方法名跟全局管理对象中actions里面的方法名相同,并且定义的方法会带有一个参数,通过参数传递数据。满足该规则,就可以使用 mapActions 映射函数生成方法。
注意: 如果要映射私有模块中mutations/actions里面的方法,函数的第一个参数设置为模块的名称。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)