官方文檔的main.js是這樣寫的:
import Vue from 'vue'
...
new Vue({
el: '#app',
router,
store,
render: h => h(App)
})
而我們在攔截http時,有可能以為token無效跳轉(zhuǎn)到登錄:
NProgress.configure({ showSpinner: false }) // NProgress Configuration
router.beforeEach(async (to, from, next) => {
// 全局前置守衛(wèi),當(dāng)有路由進行跳轉(zhuǎn)時就會進入這個守衛(wèi)
NProgress.start() // 開始加載進度條
document.title = getPageTitle(to.meta.title)// 設(shè)置頁面標(biāo)題
const hasToken = getToken() // 判斷用戶是否登錄,也就是是否能獲得token值,
if (hasToken) {
...
next()
} else {
window.location.replace(process.env.VUE_APP_API); // 這種方式是跳轉(zhuǎn)到外部鏈接登錄
// 或者跳轉(zhuǎn)到內(nèi)部鏈接login路由
}
})
router.afterEach(() => {
// 全局后置鉤子
NProgress.done()
})
但是我們在這里無法拿到this,所以這么才能走this.$router.push({ name: "xxx", params: { xx } });呢。
很簡單,就在main.js里面拿出Vue就行:
let vue = new Vue({
el: '#app',
router,
store,
render: h => h(App)
})
export default vue
然后再攔截里面引入main就可以拿到vue了:
import vue from './main.js'
...
vue.$router.push({ name: "xxx", params: { xx } })