32 lines
744 B
TypeScript
32 lines
744 B
TypeScript
import type { Router } from 'vue-router'
|
|
|
|
interface CustomRouter extends Router {
|
|
running?: boolean
|
|
nextRoute?: string | null
|
|
}
|
|
|
|
export default defineNuxtPlugin((nuxtApp) => {
|
|
const customRouter: CustomRouter = useRouter()
|
|
|
|
nuxtApp.hook('page:start', () => {
|
|
customRouter.running = false
|
|
customRouter.beforeEach((to, _from, next) => {
|
|
if (customRouter.running) {
|
|
next(true)
|
|
} else {
|
|
customRouter.nextRoute = to.fullPath
|
|
next(false)
|
|
}
|
|
})
|
|
})
|
|
|
|
nuxtApp.hook('page:transition:finish', () => {
|
|
customRouter.running = true
|
|
if (customRouter.nextRoute) {
|
|
customRouter
|
|
.push(customRouter.nextRoute)
|
|
.then(() => (customRouter.nextRoute = null))
|
|
}
|
|
})
|
|
})
|