router.beforeEach((to, from, next) => { // ... })
在路由守衛中,只有next()
是放行,其他的諸如:next('/logon') 、 next(to) 或者 next({ ...to, replace: true })
都不是放行,而是:中斷當前導航,執行新的導航
next()
是放行,但是如果next()
里有參數的話,next()
就像被重載一樣,就有了不同的功能。
使用動態添加路由addRoutes()會遇到下面的情況:
在addRoutes()之后第一次訪問被添加的路由會白屏,這是因為剛剛addRoutes()就立刻訪問被添加的路由,然而此時addRoutes()沒有執行結束,因而找不到剛剛被添加的路由導致白屏。因此需要從新訪問一次路由才行。
該如何解決這個問題 ?
此時就要使用next({ ...to, replace: true }) 來確保 addRoutes() 時動態添加的路由已經被完全加載上去。
next({ ...to, replace: true }) 中的 replace: true 只是一個設置信息,告訴VUE本次操作后,不能通過瀏覽器后退按鈕,返回前一個路由。