vuex模塊化

首先需要安裝vuex

cnpm install vuex

在src目錄下新增store文件夾庐杨,然后新增modules文件夾掺冠,存放每個(gè)模塊的狀態(tài)管理文件狮腿,然后新增action.js杨名,getters.js,index.js泽艘,mutation.js欲险,types.js

types.js:內(nèi)定義常量來(lái)表示事件類型

user.js:內(nèi)寫(xiě)該 user 組件內(nèi)用到的 state 、getters 匹涮、 actions 和 mutations天试,并最后統(tǒng)一導(dǎo)出

getters.js: 內(nèi)寫(xiě)原來(lái)的 getters ,用來(lái)獲取屬性

actions.js :內(nèi)寫(xiě)原來(lái)的 actions 然低,就是要執(zhí)行的動(dòng)作喜每,如流程的判斷务唐、異步請(qǐng)求 。

index.js: 是用來(lái)組裝 actions.js 灼卢、 getters.js 绍哎、user.js 的来农,然后進(jìn)行統(tǒng)一的導(dǎo)出

以用戶信息模塊為例子,user.js內(nèi)容如下:

import types from '@/store/types'


const state = {

? userName: '' || localStorage.getItem("userName"),

? userId: '' || localStorage.getItem("userId"),

? isSignin: false || localStorage.getItem("isSignin"),

? userRole: '' || localStorage.getItem("userRole"),

}


var getters = {

?userName: (state) => state.userName,

?userId: (state) => state.userId,

?isSignin: (state) => state.isSignin,

?userRole: (state) => state.userRole,

?isAdmin(state) {

?? ?return typeof state.userRole != 'undefined' && state.userRole != null && state.userRole.indexOf("ROLE_ADMIN") >=0

?},

?isUser(state) {

?? ?return typeof state.userRole != 'undefined' && state.userRole != null && state.userRole.indexOf("ROLE_USER") >=0

?}

}


const actions = {

?setUserInfo(context,userinfo){

?? ?if(typeof userinfo != 'undefined' && typeof userinfo.userId != 'undefined'

?????? ?&& typeof userinfo.userName != 'undefined' ){

????? context.commit(types.SETUSERINFO,userinfo);

?? ?}

?},

?clearUserInfo(context){

??? context.commit(types.CLEAR_USERINFO);

?}

}


const? mutations= {

?[types.SETUSERINFO](state, userinfo){

????? state.userName = userinfo.userName;

????? state.userId = userinfo.userId;

????? state.isSignin = userinfo.isSignin;

????? state.userRole = userinfo.userAuthorities;

????? localStorage.setItem("userId", userinfo.userId);

????? localStorage.setItem("userName", userinfo.userName);

????? localStorage.setItem("isSignin", userinfo.isSignin);

????? localStorage.setItem("userRole", userinfo.userAuthorities);

?},

?[types.CLEAR_USERINFO](state){

??? state.userName = '';

??? state.userId = '';

??? state.isSignin = false;

??? state.userRole = '';

??? localStorage.setItem("userId","");

??? localStorage.setItem("userName","");

??? localStorage.setItem("isSignin", false);

??? localStorage.setItem("userRole", '');

?}

}


export default {

? state,

? getters,

? actions,

? mutations

}


從user.js中鞋真,筆者定義了state,getters沃于,actions涩咖,mutations。通過(guò)vuex的getters可以獲取定義的狀態(tài)state繁莹。如果要操作狀態(tài)檩互,則要觸發(fā)actions 提交mutations修改狀態(tài)。

type.js內(nèi)容如下:

const

SETUSERINFO = "SETUSERINFO";//設(shè)置登錄用戶信息

const CLEAR_USERINFO = "CLEAR_USERINFO";//清除用戶信息


export default {

? SETUSERINFO,

? CLEAR_USERINFO

}

index.js內(nèi)容如下咨演,module允許我們模塊化管理狀態(tài):

import Vue from 'vue'

import vuex from 'vuex'

Vue.use(vuex)


import getters from './getters'

import actions from './actions'

import mutations from './mutations'

import user from './modules/user'


export default new vuex.Store({

? getters,

? actions,

? mutations,

? modules: {

??? user

?}

})

在main.js中引入

import store from './store/index'


new Vue({

? el: '#app',

? router,

? i18n,

? store,

? components: { App },

? template: '<App/>'

})

獲取狀態(tài)闸昨,比如要獲取用戶是否為管理員,是管理員才顯示管理菜單:

<el-col:span="4"v-show="$store.getters.isAdmin">

?? ?<el-menu-itemindex="/manage/case">{{ $t("menuName.caseManage") }}</el-menu-item>

</el-col>

修改狀態(tài)薄风,比如登陸后設(shè)置用戶的信息:

var userinfo = response.data.result;

userinfo.isSignin = true;

this.$store.dispatch("setUserInfo", userinfo);

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末饵较,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子遭赂,更是在濱河造成了極大的恐慌循诉,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撇他,死亡現(xiàn)場(chǎng)離奇詭異茄猫,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)困肩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)划纽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人锌畸,你說(shuō)我怎么就攤上這事勇劣。” “怎么了蹋绽?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵芭毙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我卸耘,道長(zhǎng)退敦,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任蚣抗,我火速辦了婚禮侈百,結(jié)果婚禮上瓮下,老公的妹妹穿的比我還像新娘。我一直安慰自己钝域,他們只是感情好讽坏,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著例证,像睡著了一般路呜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上织咧,一...
    開(kāi)封第一講書(shū)人閱讀 49,036評(píng)論 1 285
  • 那天胀葱,我揣著相機(jī)與錄音,去河邊找鬼笙蒙。 笑死抵屿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的捅位。 我是一名探鬼主播轧葛,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼艇搀!你這毒婦竟也來(lái)了尿扯?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤中符,失蹤者是張志新(化名)和其女友劉穎姜胖,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體淀散,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡右莱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了档插。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慢蜓。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖郭膛,靈堂內(nèi)的尸體忽然破棺而出晨抡,到底是詐尸還是另有隱情,我是刑警寧澤则剃,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布耘柱,位于F島的核電站,受9級(jí)特大地震影響棍现,放射性物質(zhì)發(fā)生泄漏调煎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一己肮、第九天 我趴在偏房一處隱蔽的房頂上張望士袄。 院中可真熱鬧悲关,春花似錦、人聲如沸娄柳。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)赤拒。三九已至秫筏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間需了,已是汗流浹背跳昼。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工般甲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肋乍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓敷存,卻偏偏與公主長(zhǎng)得像墓造,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子锚烦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容