vue 解決addRoutes多次添加路由重復(fù)的操作
我就廢話不多說了,大家還是直接看代碼吧~
import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) const createRouter = () => new Router({ mode: 'history', routes: [] }) const router = createRouter() export function resetRouter () { const newRouter = createRouter() router.matcher = newRouter.matcher // the relevant part } export default router
找老外的文檔解決的問題,在登出的模塊調(diào)用resetRouter方法,把原來的路由替換。
補(bǔ)充知識:vue中 做權(quán)限管理 使用router.addRoutes()動態(tài)添加路由以及解決刷新失效,跳轉(zhuǎn)后刷新失效問題
最近在公司做知識儲備,有個(gè)權(quán)限的問題干擾了我2天,今天終于把他理順了?。?!
一、需求明確
我想做的是后臺管理系統(tǒng)的權(quán)限管理,(所有的數(shù)據(jù)都是使用mockJs模擬得來),登錄的時(shí)候,發(fā)送表單驗(yàn)證,驗(yàn)證成功后,后臺返回權(quán)限列表,權(quán)限不同,返回的列表不同,拿到權(quán)限列表后,把權(quán)限列表渲染出來在頁面?zhèn)冗厵谏稀?/p>
二、注意點(diǎn)
(1) 前端提前設(shè)置靜態(tài)的權(quán)限列表,通常只包括頁面公共的部分,比如 login。
(2)前端提前定義所有的權(quán)限列表,將其定義為一個(gè)數(shù)組,該數(shù)組中包含所有的權(quán)限。
(3)后臺返回的數(shù)據(jù)是該用戶擁有的所有權(quán)限列表,一般寫成路由形式,但只包含name即可,如:
{ "code": 0, "message": "獲取權(quán)限成功", "data": [ { "name": "訂單管理", "children": [ { "name": "訂單列表" }, { "name": "生產(chǎn)管理", "children": [ { "name": "生產(chǎn)列表" } ] }, { "name": "退貨管理" } ] } ] }
三、思路與實(shí)現(xiàn)
(1)當(dāng)用戶點(diǎn)擊登錄的時(shí)候,驗(yàn)證成功后,可以獲取當(dāng)前用戶的id(token)存儲到sessionStorage中。
(2)根據(jù) '后臺返回的權(quán)限列表(getList)',去比對 '我們提前定義好的權(quán)限列表(powerList)',然后得出 '應(yīng)該動態(tài)添加的權(quán)限列表(list)' ,并存放到vuex中,最后執(zhí)行addRoutes把比對出來的權(quán)限路由列表動態(tài)添加到路由中即可。
(3)進(jìn)入home頁面,渲染側(cè)邊欄。
四、問題
(1)vuex中數(shù)據(jù)存儲在內(nèi)存中,刷新后失效需要重新獲取。因此會出現(xiàn)動態(tài)頁面失效問題。我們需要根據(jù)是否為刷新頁面來重新加載即可。
(2)進(jìn)入動態(tài)加載的頁面,然后再刷新,也會出現(xiàn)上面的情況
五、解決方法
在router的全局導(dǎo)航守衛(wèi)beforeEach中設(shè)置,根據(jù)vuex中是否有l(wèi)ist 來判斷是否為刷新頁面,如果有那么是第一次登陸, 如果沒有,那么就為刷新頁面,需要重新執(zhí)行即可。
getRoutes就是執(zhí)行路由對比,然后執(zhí)行addRoutes的函數(shù),因?yàn)槠渲杏蝎@取后臺的路由列表這一步,為異步操作,所以應(yīng)該放在action中
以上這篇vue 解決addRoutes多次添加路由重復(fù)的操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- vue使用動態(tài)添加路由(router.addRoutes)加載權(quán)限側(cè)邊欄的方式
- vue addRoutes路由動態(tài)加載操作
- 使用VueRouter的addRoutes方法實(shí)現(xiàn)動態(tài)添加用戶的權(quán)限路由
- vue動態(tài)添加路由addRoutes之不能將動態(tài)路由存入緩存的解決
- vue 解決addRoutes動態(tài)添加路由后刷新失效問題
- vue addRoutes實(shí)現(xiàn)動態(tài)權(quán)限路由菜單的示例
- vue-router+vuex addRoutes實(shí)現(xiàn)路由動態(tài)加載及菜單動態(tài)加載
- vue-router4動態(tài)路由刷新404/白屏的解決
- vue訪問未定義的路由時(shí)重定向404問題
- vue3動態(tài)路由刷新后空白或者404問題的解決
- vue 項(xiàng)目中當(dāng)訪問路由不存在的時(shí)候默認(rèn)訪問404頁面操作
- vue?使用addRoutes動態(tài)添加路由及刷新頁面跳轉(zhuǎn)404路由的問題解決方案
相關(guān)文章
Vue過濾器(filter)實(shí)現(xiàn)及應(yīng)用場景詳解
在Vue中使用過濾器(Filters)來渲染數(shù)據(jù)是一種很有趣的方式,下面這篇文章主要給大家介紹了關(guān)于Vue過濾器(filter)實(shí)現(xiàn)及應(yīng)用場景的相關(guān)資料,需要的朋友可以參考下2021-06-06解決@vue/cli安裝成功后,運(yùn)行vue -V報(bào):不是內(nèi)部或外部命令的問題
這篇文章主要介紹了解決@vue/cli安裝成功后,運(yùn)行vue -V報(bào):不是內(nèi)部或外部命令的問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10vue.js 實(shí)現(xiàn)點(diǎn)擊div標(biāo)簽時(shí)改變樣式
這篇文章主要介紹了vue.js 實(shí)現(xiàn)點(diǎn)擊div標(biāo)簽時(shí)改變樣式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08vue可視化大屏實(shí)現(xiàn)無線滾動列表飛入效果
本文主要介紹了vue可視化大屏實(shí)現(xiàn)無線滾動列表飛入效果,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04