当前位置: 首页 > news >正文

《Vue Router实战教程》7.编程式导航

欢迎观看《Vue Router 实战(第4版)》视频课程

    1. 编程式导航

除了使用 <router-link> 创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写代码来实现。

      1. 导航到不同的位置

注意: 下面的示例中的 router 指代路由器实例。在组件内部,你可以使用 $router 属性访问路由,例如 this.$router.push(...)。如果使用组合式 API,你可以通过调用 useRouter() 来访问路由器。

想要导航到不同的 URL,可以使用 router.push 方法。这个方法会向 history 栈添加一个新的记录,所以,当用户点击浏览器后退按钮时,会回到之前的 URL。

当你点击 <router-link> 时,内部会调用这个方法,所以点击 <router-link :to="..."> 相当于调用 router.push(...) :

声明式

编程式

<router-link :to="...">

router.push(...)

该方法的参数可以是一个字符串路径,或者一个描述地址的对象。例如:

// 字符串路径

router.push('/users/eduardo')

// 带有路径的对象

router.push({ path: '/users/eduardo' })

// 命名的路由,并加上参数,让路由建立 url

router.push({ name: 'user', params: { username: 'eduardo' } })

// 带查询参数,结果是 /register?plan=private

router.push({ path: '/register', query: { plan: 'private' } })

// 带 hash,结果是 /about#team

router.push({ path: '/about', hash: '#team' })

注意:如果提供了 path,params 会被忽略,上述例子中的 query 并不属于这种情况。取而代之的是下面例子的做法,你需要提供路由的 name 或手写完整的带有参数的 path :

const username = 'eduardo'

// 我们可以手动建立 url,但我们必须自己处理编码

router.push(`/user/${username}`) // -> /user/eduardo

// 同样

router.push({ path: `/user/${username}` }) // -> /user/eduardo

// 如果可能的话,使用 `name` 和 `params` 从自动 URL 编码中获益

router.push({ name: 'user', params: { username } }) // -> /user/eduardo

// `params` 不能与 `path` 一起使用

router.push({ path: '/user', params: { username } }) // -> /user

当指定 params 时,可提供 string 或 number 参数(或者对于可重复的参数可提供一个数组)。任何其他类型(如对象、布尔等)都将被自动字符串化。对于可选参数,你可以提供一个空字符串("")或 null 来移除它。

由于属性 to 与 router.push 接受的对象种类相同,所以两者的规则完全相同。

router.push 和所有其他导航方法都会返回一个 Promise,让我们可以等到导航完成后才知道是成功还是失败。我们将在 Navigation Handling 中详细介绍。

      1. 替换当前位置

它的作用类似于 router.push,唯一不同的是,它在导航时不会向 history 添加新记录,正如它的名字所暗示的那样——它取代了当前的条目。

声明式

编程式

<router-link :to="..." replace>

router.replace(...)

也可以直接在传递给 router.push 的 to 参数中增加一个属性 replace: true :

router.push({ path: '/home', replace: true })

// 相当于

router.replace({ path: '/home' })

      1. 横跨历史

该方法采用一个整数作为参数,表示在历史堆栈中前进或后退多少步,类似于 window.history.go(n)。

例子

// 向前移动一条记录,与 router.forward() 相同

router.go(1)

// 返回一条记录,与 router.back() 相同

router.go(-1)

// 前进 3 条记录

router.go(3)

// 如果没有那么多记录,静默失败

router.go(-100)

router.go(100)

      1. 篡改历史

你可能已经注意到,router.push、router.replace 和 router.go 是 window.history.pushState、window.history.replaceState 和 window.history.go 的翻版,它们确实模仿了 window.history 的 API。

因此,如果你已经熟悉 Browser History APIs,在使用 Vue Router 时,操作历史记录就会觉得很熟悉。

值得一提的是,无论在创建路由器实例时传递什么 history 配置,Vue Router 的导航方法 (push、replace、go) 都能始终正常工作。

相关文章:

  • Java中工厂模式和抽象工厂模式的区别
  • 搜广推校招面经七十二
  • DeepSeek:穿透行业知识壁垒的搜索引擎攻防战
  • 基于神经环路的神经调控可增强遗忘型轻度认知障碍患者的延迟回忆能力
  • 第十七天 - Jenkins API集成 - 流水线自动化 - 练习:CI/CD流程优化
  • 展讯android15源码编译之apk单编
  • JavaWeb 课堂笔记 —— 08 请求响应
  • 蓝桥杯 Web 方向入门指南:从基础到实战
  • tauri2 程序如何拿到启动参数?例如-toen
  • Express中间件(Middleware)详解:从零开始掌握(3)
  • Go:程序结构
  • 金融科技数据安全
  • 责任链设计模式(单例+多例)
  • T5-LM 模型总结
  • go 通过汇编分析函数传参与返回值机制
  • NuGet包离线安装
  • Linux 入门七:从基础到进阶的文件操作
  • 【Ubutun】 在Linux Yocto的基础上去适配4G模块
  • 【AI提示词】创业导师提供个性化创业指导
  • JAVA后端八股面试经验总结-前言篇
  • 手机网站建设公司/淘宝推广软件哪个好
  • 东莞杀虫公司东莞网站建设/百度推广客服工作怎么样
  • 做网站的哪家公司好/有品质的网站推广公司
  • jsp做网站注册页面/快刷网站
  • 新郑做网站/佛山网站建设十年乐云seo
  • 熊掌号网站怎么做/美国疫情最新数据消息