1. router.beforeEach 路由守衛(wèi)
我們可以使用這個(gè)方法,按需攔截用戶訪問(wèn)某些敏感路由,例如:
router.beforeEach((to,from,next)=>{ //路由的全局前置守衛(wèi)
if(to.path.indexOf('/account')==-1){ //判斷用戶訪問(wèn)的是不是個(gè)人中心
next() //不是個(gè)人中心,直接放行
}else{
if(store.state.my.userInfo){ //判斷登錄狀態(tài)
next() //如果已經(jīng)登錄,直接放行
}else{
next('/login') //如果沒(méi)有登錄,則跳至登錄頁(yè)
}
}
})
2. router.push 編程式導(dǎo)航
通過(guò)編程式導(dǎo)航,我們可以通過(guò)事件的方式觸發(fā)路由跳轉(zhuǎn)
// 字符串
router.push('home')
// 對(duì)象
router.push({ path: 'home' })
// 命名的路由
router.push({ name: 'user', params: { userId: 123 }})
// 帶查詢參數(shù),變成 /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})
3. router.go、router.back、router.forward 路由的進(jìn)入與返回
router.go 作用等同于window.history.go
// 在瀏覽器記錄中前進(jìn)一步,等同于 history.forward()
router.go(1)
// 后退一步記錄,等同于 history.back()
router.go(-1)
// 前進(jìn) 3 步記錄
router.go(3)
4. router.addRoute 動(dòng)態(tài)設(shè)置路由映射
添加一條新路由規(guī)則。如果該路由規(guī)則有 name,并且已經(jīng)存在一個(gè)與之相同的名字,則會(huì)覆蓋它。
axios.get('/login',(result)=>{ //通過(guò)異步接口獲取對(duì)應(yīng)用戶的特有路由配置
let {routerList} = result
routerList.forEach((item) => {
this.$router.addRoute(item) //通過(guò)addRoute方法依次將路由配置設(shè)置給router對(duì)象
})
})