注意,route 和 router 不一样
route 是路由属性对象,显示页面的路由属性
router 是路由跳转对象,掌管跳转页面的方法

方法

push( ) 跳转

格式:router.push( ‘路径’, 跳转成功时调用函数, 跳转终止时调用函数 )
只有路径是必选的,其他可选。
跳转成功成功完成 :在所有的异步钩子被解析之后)
跳转成功终止 :导航到相同的路由、或在当前导航完成之前导航到另一个不同的路由

  1. // 字符串
  2. $router.push('home')
  3. // 对象
  4. $router.push({ path: 'home' })
  5. // 命名的路由,好处就是参数是密文,坏处就是刷新页面密文参数会消失,可能会出错
  6. $route.push({ name: 'user', params: { userId: '123' }})
  7. // 带查询参数,变成 /register?plan=private
  8. $route.push({ path: 'register', query: { plan: 'private' }})
  9. //等价于
  10. $route.push('register'+'?plan=private')

注意:如果提供了 path,params 会被忽略

  1. const userId = '123'
  2. router.push({ name: 'user', params: { userId }}) // -> /user/123
  3. router.push({ path: `/user/${userId}` }) // -> /user/123
  4. // 这里的 params 不生效
  5. router.push({ path: '/user', params: { userId }}) // -> /user

replace( ) 跳转但不留记录

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

go(n) 跳转步数

image.png 相当于点击前进(正数)和后退(负数),

  1. // 在浏览器记录中前进一步,等同于 history.forward()
  2. router.go(1)
  3. // 后退一步记录,等同于 history.back()
  4. router.go(-1)
  5. // 刷新页面
  6. router.go(0)
  7. // 前进 3 步记录
  8. router.go(3)
  9. // 如果 history 记录不够用,那就默默地失败呗
  10. router.go(-100)
  11. router.go(100)

forward( ) 前进

image.png
相当于go(1)

back( ) 返回

image.png
相当于go(-1)

用法

Vue router 3.X ,对应Vue 2.x

方法见上

  1. <template>
  2. <button @click="gotoUser">点我跳转</button>
  3. </template>
  4. <script>
  5. export default {
  6. methods:{
  7. gotoUser(){
  8. // 通过 this.$router.方法 进行跳转
  9. // 1、基本用法,参数是字符串,对应path
  10. this.$router.push("/user") // 跳转到路径path为user的页面
  11. // 2、对象用法,参数是路由属性对象,可以带上其他属性一起跳转
  12. this.$router.push({ name: 'user', params: { username: 'why' } })
  13. }
  14. }
  15. }
  16. </script>

Vue router 4.X ,对应Vue3.x

方法见上

  1. <script>
  2. import { useRouter } from "vue-router"
  3. export default {
  4. setup(){
  5. const router = useRouter();
  6. // 通过 router.方法 进行跳转
  7. const gotoUser = ()=>{
  8. // 1、基本用法,参数是字符串,对应path
  9. router.push("/user") // 跳转到路径path为user的页面
  10. // 2、对象用法,参数是路由属性对象,可以带上其他属性一起跳转
  11. router.push({ name: 'user', params: { username: 'why' } })
  12. }
  13. return {
  14. path
  15. }
  16. }
  17. }
  18. </script>