Vue3 如何进行路由跳转及传参

19,573 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2 天,点击查看活动详情

Vue Router 是 Vue 的官方路由,在 Vue3 中,路由跳转和传参的实现方式相较 Vue2 发生了变化,接下来一起了解一下关于 Vue3 的路由跳转及传参。

Vue2 的路由形式

在 Vue2 中,我们这会这样来路由跳转以及传参:

this.$router.push({ path:'/home', query:{ msg:'hello' } })

用这样的方式来读取和接收路由参数:

var name = this.$route.query.msg;

Vue3 的路由形式

在 源文件 vue-router.d.ts 中可以查看到相关的定义:

image.png

  • useRouter:返回当前路由位置,相当于 vue2 的 this.$router
  • useRoute:返回路由实例,相当于 vue2 的 this.$route

其中,useRouter 返回的是 router 实例对象,它是通过 new VueRouter() (或 createRouter()) 来创建的路由实例对象,它是全局的,包含了所有的路由、以及相关的方法和属性。

在控制图输出 useRouter 实例,如下:

image.png

useRoute 返回的是 route 对象(一个跳转的路由对象),它是是局部对的象。

在控制图输出 useRoute 实例,如下: image.png

使用方式

第一步:引入,代码如下:

import { useRoute, useRouter } from "vue-router"

Vue3 中要注意的是,router = useRouter() 的执行要放在 setup() 中,并且不需要返回 router 或 route

第二步:使用:跳转及传参,后续相关的操作与 Vue2 类似(动态路由传参也与 Vue2 类似),代码如下:

setup(){
    const router = useRouter()
    router.push({
        path: '/home',
        // name: 'home',
        query: {
            msg: 'hello'
        }
    })
}

第三步:接收参数,代码如下:

setup() {
    const route = useRoute()
    console.log(route.query)
}

显式路由和隐式路由

有路由跳转的时候可以配置 name 、 path ,传参方式也有 params 、query 两种。

  • params 隐式路由传参
  • query 显式路由传参

(显式时数据会跟在 url 之后,而隐式不会。隐式时要注意刷新页面params可能会消失,可将数据存在缓存中)

具体官方可参考:useRoute API