這篇文章給大家介紹如何上手vue vuex vue-rouert后臺的權(quán)限路由,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
項目地址: vue-simple-template
共三個角色:adan barbara carrie 密碼全是:123456
adan 擁有 最高權(quán)限A 他可以看到 red , yellow 和 blue 頁面(共三個頁面)
barbara 擁有 權(quán)限B 他可以看到 red 和 yellow 頁面
carrie 擁有 權(quán)限C 他可以看到 red 和 blue 頁面
技術(shù)棧
webpack ---- 打包神器 vue ---- JavaScript 框架 vuex ---- 實現(xiàn)不同組件間的狀態(tài)共享 vue-router ---- 頁面路由 babel-polyfill ---- 將ES6代碼轉(zhuǎn)為ES5代碼 normalize.css ---- 重置掉該重置的樣式 element-ui ---- UI組件庫
項目初始化
# cd 到項目文件夾 cd weven-simple-template # 安裝依賴 (本項目還安裝了其他依賴詳情 請見 package.json 文件) npm install # 運行項目 npm run dev
項目結(jié)構(gòu)
vue-cil 腳手架初始化項目后,我只修改過src文件夾
src ├── App.vue ---- 頁面入口 ├── api ---- api請求 │ └── login.js ---- 模擬json對象數(shù)據(jù) ├── assets ---- 主題 字體等靜態(tài)資源 │ └── logo.png ├── components ---- 組件 │ ├── index.vue │ └── login.vue ├── main.js ---- 初始化組件 加載路由 ├── router ---- 路由 │ └── index.js └── store ---- vuex狀態(tài)管理 ├── getters.js ├── index.js └── modules └── login.js
重點:
動態(tài)路由的關(guān)鍵在于router配置的 meta字段 和vuex的 狀態(tài)共存 (不懂可以先查看官方文檔)
router/index.js
// 初始化路由 export default new Router({ routes: [ { path: '/login', name: 'Login', component: Login } ] }); // 動態(tài)路由 meta 定義了role export const powerRouter =[ { path: '/',redirect:'/red', name: 'index',component: Index,hidden:false, children: [ { path: '/red', name: 'red', component: red,}, { path: '/yellow', name: 'yellow', component: yellow, meta: {role: 'B'}}, { path: '/blue', name: 'blue', component: blue, meta: {role: 'C'}} ] } ];
store/modules/lo
Logins({ commit }, info){ return new Promise((resolve, reject) => { let data={}; loginByUserInfo.map(function (item) { //獲取所以用戶信息 if(info.username === item.username || info.pew === item.pew){ commit('SET_USERNAME',item.username); //將username和role進行存儲 sessionStorage.setItem('USERNAME', item.username); //存入 session commit('SET_ROLE',item.role); sessionStorage.setItem('ROLE', item.role); return data={username:item.username,introduce:item.introduce}; }else{ return data; } }); resolve(data); }).catch(error => { reject(error); }); }, Roles({ commit }, newrouter){ return new Promise((resolve, reject) => { commit('SET_NEWROUER',newrouter); //存儲最新路由 resolve(newrouter); }).catch(error => { reject(error); }); },
gin.js actions部分
Logins({ commit }, info){ return new Promise((resolve, reject) => { let data={}; loginByUserInfo.map(function (item) { //獲取所以用戶信息 if(info.username === item.username || info.pew === item.pew){ commit('SET_USERNAME',item.username); //將username和role進行存儲 sessionStorage.setItem('USERNAME', item.username); //存入 session commit('SET_ROLE',item.role); sessionStorage.setItem('ROLE', item.role); return data={username:item.username,introduce:item.introduce}; }else{ return data; } }); resolve(data); }).catch(error => { reject(error); }); }, Roles({ commit }, newrouter){ return new Promise((resolve, reject) => { commit('SET_NEWROUER',newrouter); //存儲最新路由 resolve(newrouter); }).catch(error => { reject(error); }); },
main.js
router.beforeEach((to, from, next) => { if(store.getters.role){ //判斷role 是否存在 if(store.getters.newrouter.length !== 0){ next() //resolve 鉤子 }else{ let newrouter if (store.getters.role == 'A') { //判斷權(quán)限 newrouter = powerRouter } else { let newchildren = powerRouter[0].children.filter(route => { if(route.meta){ if(route.meta.role == store.getters.role){ return true } return false }else{ return true } }); newrouter = powerRouter newrouter[0].children = newchildren } router.addRoutes(newrouter) //添加動態(tài)路由 store.dispatch('Roles',newrouter).then(res => { next({ ...to }) }).catch(() => { }) } }else{ if (['/login'].indexOf(to.path) !== -1) { next() } else { next('/login') } } })
components/index.vue
// mapGetters 輔助函數(shù)僅僅是將 store 中的 getter 映射到局部計算屬性 ...mapGetters([ 'newrouter' ])
關(guān)于如何上手vue vuex vue-rouert后臺的權(quán)限路由就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當前名稱:如何上手vuevuexvue-rouert后臺的權(quán)限路由-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://www.chinadenli.net/article10/dsoido.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、ChatGPT、商城網(wǎng)站、營銷型網(wǎng)站建設(shè)、面包屑導航、網(wǎng)站設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)