以下是Vuex全局狀態管理,數據共享具體操作: 官網:https://vuex.vuejs.org/zh/installation.html <!-- 以下是調用(獲取/設置)共享數據的頁面:01.vue --> <template> <div> <h3> Vuex全局狀態管理,數據共享: 1,可以查看vuex官網:https://vuex.vuejs.org/zh/installation.html 2,引入vuex有兩種方式: a,直接下載保存vuex.js b,(如果使用cnpm,所以下面也要使用cnpm)在項目名稱下一級安裝vuex: 安裝: cnpm install vuex --save 卸載: cnpm uninstall vuex 3,所有插件的使用都是在src/main.js中進行導入的。包括:插件vue.js,vuex.js,App,router等。 打開src/main.js 導入如: import store from './store',並且需要在main.js中的 new Vue實例中添加:store。如下: new Vue({ el: '#app', router, store,//引用vuex倉庫:store components: { App }, template: '<App/>' }) 4, 在src目錄下創建stroe文件夾,以及在store里面創建index.js文件: src/store/index.js文件中進行配置,如下: import Vue from 'vue' //調用 vue 這里可以分號,也可以不添加分號 import Vuex from 'vuex'; //調用 vuex 插件 這里可以分號,也可以不添加分號 Vue.use(Vuex) //全局調用Vuex,這里千萬不能添加分號 export default new Vuex.Store({ //實例化vuex倉庫 /*store運行機制: 通過actions觸發mutations(類似事件),進而修改具體倉庫狀態state(store.state.count) Vuex 中的 mutation 非常類似於事件:每個 mutation 都有一個字符串的 事件類型 (type) 和 一個 回調函數 (handler)。*/ state:{//共享數據池,聲明公共數據,即狀態 count:0, num:1, }, mutations:{//用於處理公共數據 increment(state,num){ state.count++; state.num = num; } }, actions:{//把數據處理委托給mutations對象的increment方法 inc({commit},obj){ //唯一方法:使用 store.commit 方法觸發狀態變更 commit('increment',obj); } } }) 5,在需要調用共享數據的頁面進行數據調用和修改: 獲取共享數據:this.$store.state.count; 修改共享數據:this.$store.dispatch('inc',形參/實參); /*store運行機制:actions --> mutations --> state 所以在修改共享數據時, 是直接調用actions中的指定函數,所以這里的'inc'函數明一定要存在。*/ </h3> <div>{{count}}</div> <input type="button" name="" value="修改共享數據num" @click="setNum"><br/> <input type="button" name="" value="獲取共享數據num" @click="getNum"><br/> <input type="button" name="" value="獲取共享數據count" @click="getCount"><br/> <div>=========================================</div> <input type="button" name="" value="修改共享數據love" @click="setLove"><br/> <input type="button" name="" value="獲取共享數據love" @click="getLove"><br/> <input type="button" name="" value="獲取共享數據a" @click="getA"><br/> </div> </template> <script> export default{ data(){ return{ count:0, love:'I Love You Forever!', } }, methods:{ setNum(){ this.$store.dispatch('inc',this.love);//修改共享數據num //狀態修改一定是在mutations中,一定不能在調用的頁面之中 // this.$store.state.count++; }, getNum(){ console.log(this.$store.state.num); },getCount(){ console.log(this.$store.state.count); }, setLove(){ this.$store.dispatch('str','I want to fuck you fuck you!'); //狀態修改一定是在mutations中,一定不能在調用的頁面之中 // this.$store.state.a++; }, getLove(){ console.log(this.$store.state.love); }, getA(){ console.log(this.$store.state.a); } } } </script> // 以下是src/store/index.js頁面的配置 import Vue from 'vue' //調用 vue 這里可以分號,也可以不添加分號 import Vuex from 'vuex'; //調用 vuex 插件 這里可以分號,也可以不添加分號 Vue.use(Vuex) //全局調用Vuex,這里千萬不能添加分號 export default new Vuex.Store({ //實例化vuex倉庫 /*store運行機制: 通過store.commit方法---觸發---》store.state狀態變更---》 Vuex 中的 mutation 非常類似於事件:每個 mutation 都有一個字符串的 事件類型 (type) 和 一個 回調函數 (handler)。*/ state:{//共享數據池,聲明公共數據,即倉庫狀態 count:0, num:1, a:0, love:'i love you', }, mutations:{//用於處理公共數據,mutation 英 /mjuːˈteɪʃn/ 突變 increment(state,num){ state.count++;//狀態修改一定是在mutations中,一定不能在調用的頁面之中 state.num = num; }, strings(state,str){ this.state.love=str; this.state.a++;//狀態修改一定是在mutations中,一定不能在調用的頁面之中 } }, actions:{//把數據處理委托給mutations對象的increment方法 inc({commit},obj){ commit('increment',obj); }, str({commit},str){ commit('strings',str) } } })