vue 解決addRoutes多次添加路由重復(fù)的操作
我就廢話不多說(shuō)了,大家還是直接看代碼吧~
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
找老外的文檔解決的問(wèn)題,在登出的模塊調(diào)用resetRouter方法,把原來(lái)的路由替換。
補(bǔ)充知識(shí):vue中 做權(quán)限管理 使用router.addRoutes()動(dòng)態(tài)添加路由以及解決刷新失效,跳轉(zhuǎn)后刷新失效問(wèn)題
最近在公司做知識(shí)儲(chǔ)備,有個(gè)權(quán)限的問(wèn)題干擾了我2天,今天終于把他理順了?。?!
一、需求明確
我想做的是后臺(tái)管理系統(tǒng)的權(quán)限管理,(所有的數(shù)據(jù)都是使用mockJs模擬得來(lái)),登錄的時(shí)候,發(fā)送表單驗(yàn)證,驗(yàn)證成功后,后臺(tái)返回權(quán)限列表,權(quán)限不同,返回的列表不同,拿到權(quán)限列表后,把權(quán)限列表渲染出來(lái)在頁(yè)面?zhèn)冗厵谏稀?/p>
二、注意點(diǎn)
(1) 前端提前設(shè)置靜態(tài)的權(quán)限列表,通常只包括頁(yè)面公共的部分,比如 login。
(2)前端提前定義所有的權(quán)限列表,將其定義為一個(gè)數(shù)組,該數(shù)組中包含所有的權(quán)限。
(3)后臺(tái)返回的數(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)存儲(chǔ)到sessionStorage中。
(2)根據(jù) '后臺(tái)返回的權(quán)限列表(getList)',去比對(duì) '我們提前定義好的權(quán)限列表(powerList)',然后得出 '應(yīng)該動(dòng)態(tài)添加的權(quán)限列表(list)' ,并存放到vuex中,最后執(zhí)行addRoutes把比對(duì)出來(lái)的權(quán)限路由列表動(dòng)態(tài)添加到路由中即可。
(3)進(jìn)入home頁(yè)面,渲染側(cè)邊欄。
四、問(wèn)題
(1)vuex中數(shù)據(jù)存儲(chǔ)在內(nèi)存中,刷新后失效需要重新獲取。因此會(huì)出現(xiàn)動(dòng)態(tài)頁(yè)面失效問(wèn)題。我們需要根據(jù)是否為刷新頁(yè)面來(lái)重新加載即可。
(2)進(jìn)入動(dòng)態(tài)加載的頁(yè)面,然后再刷新,也會(huì)出現(xiàn)上面的情況
五、解決方法
在router的全局導(dǎo)航守衛(wèi)beforeEach中設(shè)置,根據(jù)vuex中是否有l(wèi)ist 來(lái)判斷是否為刷新頁(yè)面,如果有那么是第一次登陸, 如果沒(méi)有,那么就為刷新頁(yè)面,需要重新執(zhí)行即可。

getRoutes就是執(zhí)行路由對(duì)比,然后執(zhí)行addRoutes的函數(shù),因?yàn)槠渲杏蝎@取后臺(tái)的路由列表這一步,為異步操作,所以應(yīng)該放在action中
以上這篇vue 解決addRoutes多次添加路由重復(fù)的操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- vue使用動(dòng)態(tài)添加路由(router.addRoutes)加載權(quán)限側(cè)邊欄的方式
- vue addRoutes路由動(dòng)態(tài)加載操作
- 使用VueRouter的addRoutes方法實(shí)現(xiàn)動(dòng)態(tài)添加用戶的權(quán)限路由
- vue動(dòng)態(tài)添加路由addRoutes之不能將動(dòng)態(tài)路由存入緩存的解決
- vue 解決addRoutes動(dòng)態(tài)添加路由后刷新失效問(wèn)題
- vue addRoutes實(shí)現(xiàn)動(dòng)態(tài)權(quán)限路由菜單的示例
- vue-router+vuex addRoutes實(shí)現(xiàn)路由動(dòng)態(tài)加載及菜單動(dòng)態(tài)加載
- vue-router4動(dòng)態(tài)路由刷新404/白屏的解決
- vue訪問(wèn)未定義的路由時(shí)重定向404問(wèn)題
- vue3動(dòng)態(tài)路由刷新后空白或者404問(wèn)題的解決
- vue 項(xiàng)目中當(dāng)訪問(wèn)路由不存在的時(shí)候默認(rèn)訪問(wèn)404頁(yè)面操作
- vue?使用addRoutes動(dòng)態(tài)添加路由及刷新頁(yè)面跳轉(zhuǎn)404路由的問(wèn)題解決方案
相關(guān)文章
Vue過(guò)濾器(filter)實(shí)現(xiàn)及應(yīng)用場(chǎng)景詳解
在Vue中使用過(guò)濾器(Filters)來(lái)渲染數(shù)據(jù)是一種很有趣的方式,下面這篇文章主要給大家介紹了關(guān)于Vue過(guò)濾器(filter)實(shí)現(xiàn)及應(yīng)用場(chǎng)景的相關(guān)資料,需要的朋友可以參考下2021-06-06
解決@vue/cli安裝成功后,運(yùn)行vue -V報(bào):不是內(nèi)部或外部命令的問(wèn)題
這篇文章主要介紹了解決@vue/cli安裝成功后,運(yùn)行vue -V報(bào):不是內(nèi)部或外部命令的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
vue.js 實(shí)現(xiàn)點(diǎn)擊div標(biāo)簽時(shí)改變樣式
這篇文章主要介紹了vue.js 實(shí)現(xiàn)點(diǎn)擊div標(biāo)簽時(shí)改變樣式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
vue可視化大屏實(shí)現(xiàn)無(wú)線滾動(dòng)列表飛入效果
本文主要介紹了vue可視化大屏實(shí)現(xiàn)無(wú)線滾動(dòng)列表飛入效果,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04

