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
屬性,其中包含任何現有基路徑。
示例
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
。
示例
const router = useRouter()
router.back()
router.forward()
router.go(3)
router.push({ path: '/home' })
router.replace({ hash: '#bio' })
導航守衛
useRouter
可組合函式提供 afterEach
、beforeEach
和 beforeResolve
輔助方法,它們充當導航守衛。
然而,Nuxt 有一個路由中介軟體的概念,它簡化了導航守衛的實現並提供了更好的開發體驗。
Promise 和錯誤處理
通用路由器例項
如果你沒有 app/pages/
資料夾,那麼 useRouter
將返回一個具有類似輔助方法的通用路由器例項,但請注意,並非所有功能都受支援或與 vue-router
的行為完全相同。