useRouter
useRouter 可组合函数返回路由实例。
app/pages/index.vue
<script setup lang="ts">
const router = useRouter()
</script>
如果你只在模板中需要路由实例,请使用 $router
:
app/pages/index.vue
<template>
<button @click="$router.back()">
Back
</button>
</template>
如果你有一个 app/pages/
目录,useRouter
的行为与 vue-router
提供的完全相同。
基本操作
addRoute()
:向路由实例添加一个新路由。可以提供parentName
将新路由作为现有路由的子路由添加。removeRoute()
:通过名称移除现有路由。getRoutes()
:获取所有路由记录的完整列表。hasRoute()
:检查是否存在具有给定名称的路由。resolve()
:返回路由位置的规范化版本。还包含一个href
属性,该属性包含任何现有的 base。
Example
const router = useRouter()
router.addRoute({ name: 'home', path: '/home', component: Home })
router.removeRoute('home')
router.getRoutes()
router.hasRoute('home')
router.resolve({ name: 'home' })
基于 History API
back()
:在可能的情况下后退历史,等同于router.go(-1)
。forward()
:在可能的情况下前进历史,等同于router.go(1)
。go()
:在历史记录中前进或后退,不受router.back()
和router.forward()
所强制的层级限制。push()
:通过在历史记录栈中压入一项来编程式地导航到新 URL。建议改用navigateTo
。replace()
:通过替换路由历史栈中的当前项来编程式地导航到新 URL。建议改用navigateTo
。
Example
const router = useRouter()
router.back()
router.forward()
router.go(3)
router.push({ path: '/home' })
router.replace({ hash: '#bio' })
导航守卫
useRouter
可组合函数提供 afterEach
、beforeEach
和 beforeResolve
助手方法,可作为导航守卫。
但是,Nuxt 有 路由中间件(route middleware) 的概念,可以简化导航守卫的实现并提供更好的开发体验。
Promise 和错误处理
通用路由实例
如果你没有 app/pages/
文件夹,那么 useRouter
将返回一个通用的路由实例,具有类似的辅助方法,但请注意,并非所有功能都受支持,或与 vue-router
的行为完全相同。