Skip to content

RouterHistory 接口

RouterHistory 接口定义了历史记录管理器的核心功能,它是 Vue Router 三种历史模式(Web History、Hash History、Memory History)的共同基础。📚

📋 接口定义

typescript
interface RouterHistory {
  readonly router: Router | null
  base: string
  location: RouteLocationNormalizedLoaded
  state: HistoryState
  
  push(to: RouteLocationRaw): Promise<NavigationFailure | void>
  replace(to: RouteLocationRaw): Promise<NavigationFailure | void>
  go(delta: number): void
  back(): void
  forward(): void
  
  listen(callback: (location: RouteLocationNormalizedLoaded) => void): () => void
  destroy(): void
}

🎯 功能说明

这个接口就像是路由系统的"时间旅行机器",负责:

  1. 记录导航历史 - 跟踪用户访问过的所有路由
  2. 提供导航方法 - 前进、后退、跳转等操作
  3. 管理状态信息 - 保存路由相关的状态数据
  4. 监听变化事件 - 响应路由变化并执行回调

🔧 属性详解

router - 关联的路由实例

类型可读性说明
Router | null只读与此历史记录关联的路由实例

base - 基础路径

类型可读性说明
string读写应用的基础路径,所有路由都基于此路径

location - 当前位置信息

类型可读性说明
RouteLocationNormalizedLoaded只读当前激活的路由位置信息

state - 历史状态

类型可读性说明
HistoryState只读浏览器历史记录的状态信息

🎮 方法详解

push() - 添加新记录并跳转

typescript
push(to: RouteLocationRaw): Promise<NavigationFailure | void>

功能:添加新的历史记录并导航到指定位置。

示例

javascript
// 跳转到指定路径
history.push('/home')

// 带参数的跳转
history.push({ path: '/user', query: { id: 123 } })

// 处理跳转结果
history.push('/target').then(failure => {
  if (failure) {
    console.log('导航失败:', failure)
  }
})

replace() - 替换当前记录

typescript
replace(to: RouteLocationRaw): Promise<NavigationFailure | void>

功能:替换当前历史记录,不添加新记录。

示例

javascript
// 替换当前路由(用户点击后退时会跳过这个页面)
history.replace('/login')

// 登录成功后替换到首页
history.replace({ path: '/', query: { loggedIn: true } })

go() - 相对跳转

typescript
go(delta: number): void

功能:在历史记录中相对当前位置跳转。

示例

javascript
history.go(-1)  // 后退一页
history.go(1)   // 前进一页
history.go(-3)  // 后退三页

back() - 后退

typescript
back(): void

功能:后退到上一页,相当于 go(-1)

示例

javascript
history.back()  // 后退

forward() - 前进

typescript
forward(): void

功能:前进到下一页,相当于 go(1)

示例

javascript
history.forward()  // 前进

listen() - 监听变化

typescript
listen(callback: (location: RouteLocationNormalizedLoaded) => void): () => void

功能:监听路由位置变化,返回取消监听的函数。

示例

javascript
// 开始监听
const unsubscribe = history.listen((location) => {
  console.log('路由变化了:', location.path)
})

// 取消监听
unsubscribe()

destroy() - 销毁实例

typescript
destroy(): void

功能:清理资源,销毁历史记录实例。

示例

javascript
// 在组件卸载时销毁
onUnmounted(() => {
  history.destroy()
})

💡 实际应用

自定义导航逻辑

javascript
function smartNavigate(to) {
  // 检查是否需要特殊处理
  if (shouldReplaceInsteadOfPush(to)) {
    return history.replace(to)
  } else {
    return history.push(to)
  }
}

历史记录监听

javascript
// 监听所有路由变化
const stopListening = history.listen((newLocation, oldLocation) => {
  trackUserNavigation(newLocation, oldLocation)
})

// 在适当的时候停止监听
setTimeout(() => {
  stopListening()
}, 5000)

🔗 相关接口

💡 专业建议:通常不需要直接操作 RouterHistory 实例,Vue Router 已经提供了更友好的 API(如 useRouter())来封装这些功能。

🚀 Vue Router - 让前端路由变得简单而强大 | 构建现代化单页应用的最佳选择