02vuex-modules
Posted iwishicould
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了02vuex-modules相关的知识,希望对你有一定的参考价值。
01===> module的理解:将一个大的系统进行拆分 拆分成若干个细的模块 给个模块都有自己的 state mutations 等属性 这样可以在自己的小模块中进行修改 方便维护 module的简单使用 (1)创建main.js(首页)在store.js同级中 (2)store.js中引入 (3)modules的形式注册 在store.js中写 // Vuex 仓库文件(入口) import Vue from ‘vue‘ import Vuex from ‘vuex‘ //全局注册Vue.use(Vuex) // 引入子模块(add) import shopcar from "./ShopCar" import main from "./main" // 创建一个状态厂库 并且将它暴露出去 export default const store=new Vuex.Store( modules: // key:(模块名) value(对应模块的配置) shopcar, //它相当于把shopcar.js暴露的那个对象放置在这里 main ) // 取各个模块的值 console.log(store.state.shopcar.name) //这样可以拿到可拿到 购物出的的name值为 “我的值是购物车” console.log(store) //下面为输出的值 /* state: Object main: Object shopcar: Object */ export default store 然后创建main.js(首页) export default state: val: "主文件需要的值", name: "我的值是主文件" , mutations: ,
02====》如何在商家页面Merchant.vue 获取到 modules模块中--shangjia.js中state的数据 ps===>在main.js文件中 key值是不能够改名字的 value是引入进来的那个文件名 key:vaulue相同的话可以简写 main.js //引入store实例 import storeaa from "./store/store"; new Vue( router, store: storeaa, //这里是key:value的形式 这里是不能够改变的哦 key 的固定的值是store value的值可以跟引入的实例对象一致即可 // 这这里注册store后,全局可以共享 store了 render: h => h(App) ).$mount("#app"); store.js import Vue from ‘vue‘ import Vuex from ‘vuex‘ Vue.use(Vuex) // 引入子模块 (千万别忘记了) import shopcar from "./ShopCar" import main from "./main" import shangjia from ‘./shangjia‘ // 创建一个状态厂库 并且将它暴露出去 export default const store=new Vuex.Store( modules: // key:(模块名) value(对应模块的配置) shopcar, //它相当于把shopcar.js暴露的那个对象放置在这里 main, shangjia ) export default store shangjia.js modules中管理商家模块的数据 export default state: val:"我是商家页面数据", name:"哈哈哈商家" Merchant.vue获取shangjia.js中state的数据 <template> <div> <p> test </p> </div> </template> export default data() return test:"", , created() this.test=this.$store.state.shangjia.val; ,
03===》 利用computed:计算属性提高性能 例2不变 利用computed只要母体数据不发生改变 它就不会发生改变 添加 Merchant.vue中 将值渲染出来 <h2>为了提升性能 test1</h2> computed: test1() return this.$store.state.shangjia.name; //返回 “哈哈哈商家” ,
04===>将所有的数据放在store.js的data中 两个页面的代码一模一样 A页面点击加1 B页面数字同样发生改变 ps===>在利用modules模块来管理数据的时候 你需要在store.js 引入相应的子模块 如例2 如果将所有的数据 都放在store.js 的data中饭就不需要 引入相应的子模块 ps===> 只要你去修改state中的值 你就考虑写mutations A.vue页面 B.vue页面 <template> <div> <button @click="clickDec">-</button> <span> num </span> <button @click="addNum">+</button> </div> </template> export default data() return test: "" ; , methods: addNum() // 提交一个mutations ,改变state中的值 相调用mutations中的addNum函数 this.$store.commit("addNum") , clickDec() this.$store.commit("clickDec") , computed: num() return this.$store.state.num , ; store.js import Vue from ‘vue‘ import Vuex from ‘vuex‘ Vue.use(Vuex) // 创建一个状态厂库 并且将它暴露出去 export default const store=new Vuex.Store( state() return test:"我输测试数据", num:0 , mutations: addNum(state) state.num++; , clickDec(state) state.num--; , ) export default store
5====》对例4进行优化 this.$store.commit("chang",1) 传参 判断出入的值正数还是负数 负数不能小于0 A页面 B页面 简化了代码 <button @click="clickDec">-</button> <span> num </span> <button @click="addNum">+</button> methods: addNum() // 提交一个mutations ,改变state中的值 用了第一种方式 this.$store.commit("chang",1) , clickDec() //如果小于0 不执行改函数 if(this.$store.state.num==0) //不能将这一条语句放在 最后 将没有意义 return; this.$store.commit("chang",-1) // console.log(this.$store.state.num) , store.js 简化了 mutations: chang(state, zhi) state.num += zhi;
以上是关于02vuex-modules的主要内容,如果未能解决你的问题,请参考以下文章