Skip to content

编程式的导航 ​

本节目标:理解“编程式的导航”的核心思路,并能把它用于实际开发或面试表达。 除了使用 <router-link> 创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写代码来实现。

注意:在 Vue 实例内部,你可以通过 $router 访问路由实例。因此你可以调用 this.$router.push**。**

router.push 这个方法会向 history 栈添加一个新的记录,点击浏览器后退按钮时,则回到之前的 URL。 当你点击 <router-link> 时,这个方法会在内部调用,所以说,点击 <router-link :to="..."> 等同于调用 router.push(...)。

| |

**声明式**
**编程式**
<router-link :to="...">
router.push(...)
**参数**
String | Object
// 字符串
router.push('home')
// 对象
router.push({ path: 'home' })
// 命名的路由
router.push({ name: 'user', params: { userId: '123' } })
_// 带 hash,结果是 /about#team_
router.push({ path: '/about', hash: '#team' })
// 带查询参数,变成 /register?plan=private
router.push({ path: 'register', query: { plan: 'private' } })
**注意:**
如果提供了 path,params 会被忽略,但可以使用 query。
或提供路由的 name+params
或手写完整的带有参数的 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 同样的规则也适用于 router-link 组件的 to 属性。

当指定 params 时,可提供 string 或 number 参数(或者对于可重复的参数可提供一个数组)。任何其他类型(如 undefined、false 等)都将被自动字符串化。对于可选参数,你可以提供一个空字符串("")来跳过它。 由于属性 to 与 router.push 接受的对象种类相同,所以两者的规则完全相同。 router.push 和所有其他导航方法都会返回一个 Promise,让我们可以等到导航完成后才知道是成功还是失败。我们将在 Navigation Handling 中详细介绍。

router.replace(location, onComplete?, onAbort?) 跟 router.push 很像,唯一的不同就是,它不会向 history 添加新记录,而是跟它的方法名一样 —— 替换掉当前的 history 记录。

| |

**声明式**
**编程式**
<router-link :to="..." replace>
router.replace(...)

|也可以直接在传递给 router.push 的 routeLocation 中增加一个属性 replace: true : router.push({ path: '/home', replace: true })_// 相当于_router.replace({ path: '/home' })||

router.go(n) 这个方法的参数是一个整数,意思是在 history 记录中向前或者后退多少步,类似 window.history.go(n)。 例子 // 在浏览器记录中前进一步,等同于 history.forward() router.go(1) // 后退一步记录,等同于 history.back() router.go(-1) // 前进 3 步记录 router.go(3) // 如果 history 记录不够用,那就默默地失败呗 router.go(-100) router.go(100)

操作 History 你也许注意到 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) 在各类路由模式 (history、 hash 和 abstract) 下表现一致。 > 来自

 <https://router.vuejs.org/zh/guide/essentials/navigation.html>

本站总访问 — 次