编程式导航
除了使用
<router-link>
创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写代码来实现。
导航到不同的位置
注意: 下面的示例中的
router
指代路由器实例。在组件内部,你可以使用
$router
属性访问路由,例如
this.$router.push(...)
。如果使用组合式 API,你可以通过调用
useRouter()
来访问路由器。
想要导航到不同的 URL,可以使用
router.push
方法。这个方法会向 history 栈添加一个新的记录,所以,当用户点击浏览器后退按钮时,会回到之前的 URL。
当你点击
<router-link>
时,内部会调用这个方法,所以点击
<router-link :to="...">
相当于调用
router.push(...)
:
声明式 | 编程式 |
---|---|
<router-link :to="...">
|
router.push(...)
|
该方法的参数可以是一个字符串路径,或者一个描述地址的对象。例如:
注意
:如果提供了
path
,
params
会被忽略,上述例子中的
query
并不属于这种情况。取而代之的是下面例子的做法,你需要提供路由的
name
或手写完整的带有参数的
path
:
当指定
params
时,可提供
string
或
number
参数(或者对于
可重复的参数
可提供一个数组)。
任何其他类型(如对象、布尔等)都将被自动字符串化
。对于
可选参数
,你可以提供一个空字符串(
""
)或
null
来移除它。
由于属性
to
与
router.push
接受的对象种类相同,所以两者的规则完全相同。
router.push
和所有其他导航方法都会返回一个
Promise
,让我们可以等到导航完成后才知道是成功还是失败。我们将在
Navigation Handling
中详细介绍。
替换当前位置
它的作用类似于
router.push
,唯一不同的是,它在导航时不会向 history 添加新记录,正如它的名字所暗示的那样——它取代了当前的条目。
声明式 | 编程式 |
---|---|
<router-link :to="..." replace>
|
router.replace(...)
|
也可以直接在传递给
router.push
的
to
参数中增加一个属性
replace: true
:
横跨历史
该方法采用一个整数作为参数,表示在历史堆栈中前进或后退多少步,类似于
window.history.go(n)
。
例子