Nuxt Nation 大会即将到来。加入我们,时间为 11 月 12 日至 13 日。

useRouter

useRouter 组合式函数返回路由实例。
pages/index.vue
<script setup lang="ts">
const router = useRouter()
</script>

如果只需要在模板中使用路由实例,请使用 $router

pages/index.vue
<template>
  <button @click="$router.back()">Back</button>
</template>

如果您有 pages/ 目录,useRouter 的行为与 vue-router 提供的行为相同。

阅读 vue-router 文档关于 Router 接口的部分。

基本操作

  • addRoute(): 向路由实例添加新路由。可以提供 parentName 将新路由添加为现有路由的子路由。
  • removeRoute(): 通过名称删除现有路由。
  • getRoutes(): 获取所有路由记录的完整列表。
  • hasRoute(): 检查是否存在具有给定名称的路由。
  • resolve(): 返回路由位置的标准化版本。还包括一个 href 属性,其中包含任何现有的基路径。
示例
const router = useRouter()

router.addRoute({ name: 'home', path: '/home', component: Home })
router.removeRoute('home')
router.getRoutes()
router.hasRoute('home')
router.resolve({ name: 'home' })
router.addRoute() 将路由详细信息添加到路由数组中,在构建 Nuxt 插件 时很有用,而 router.push() 则会在页面、Vue 组件和组合式函数中立即触发新的导航。

基于历史记录 API

  • back(): 如果可能,返回历史记录,与 router.go(-1) 相同。
  • forward(): 如果可能,前进历史记录,与 router.go(1) 相同。
  • go(): 在历史记录中向前或向后移动,不受 router.back()router.forward() 中实施的层次结构限制。
  • push(): 通过在历史记录堆栈中推送条目以编程方式导航到新 URL。**建议使用 navigateTo 代替。**
  • replace(): 通过替换路由历史记录堆栈中的当前条目以编程方式导航到新 URL。**建议使用 navigateTo 代替。**
示例
const router = useRouter()

router.back()
router.forward()
router.go(3)
router.push({ path: "/home" })
router.replace({ hash: "#bio" })
阅读有关浏览器历史记录 API 的更多信息。

useRouter 组合式函数提供 afterEachbeforeEachbeforeResolve 辅助方法,用作导航守卫。

但是,Nuxt 有一个**路由中间件**的概念,它简化了导航守卫的实现,并提供了更好的开发体验。

文档 > 指南 > 目录结构 > 中间件 中了解更多信息。

Promise 和错误处理

  • isReady(): 返回一个 Promise,在路由完成初始导航时解析。
  • onError: 添加一个错误处理程序,每次导航过程中发生未捕获的错误时都会调用该处理程序。
Vue Router 文档 中了解更多信息。

通用路由实例

如果您没有 pages/ 文件夹,则 useRouter 将返回一个具有类似辅助方法的通用路由实例,但请注意,并非所有功能都可能受支持或行为与 vue-router 完全相同。