this .$route.params.id

注:这种方式的传参, 路径用 name,路径用 name,路径用 name , 用 path 会获取不到;如果在路由配置中没有添加 /:id path: 'detail' ,url 中不会显示 id,在详情页还是可以拿到参数 id,但刷新后参数丢失。

  • 以上这两种方式,传递的参数 id 会在 url 后面显示,如图:
  • 传递的参数会暴露在网址中。

    如果在路由中设置了params参数 /:id ,但是在跳转的时候没有传递参数,会导致页面没有内容或跳转失败,可在后面加 ?代表这个参数是可选的,即 /:id?

    方法二:通过 query 传参

    // 路由配置
        path: '/detail', 
        name: 'detail', 
        component: Detail 
    // 列表页
    goDetail(row) {
        this.$router.push({
            path: '/detail',
            query: {
                id: row.id
    // 详情页
    this.$route.query.id

    注:这种方式传递的参数会在地址栏的 url 后面显示 ?id=? ,类似于 get 传参; query 必须配合 path 来传参

    传递的参数是对象或数组

    还有一种情况就是,如果通过 query 的方式传递 对象或数组 ,在地址栏中会被强制转换成 [object Object],刷新后也获取不到对象值。

    此时可以通过 JSON.stringify() 方法将要传递的参数转换为字符串传递,在详情页再通过 JSON.parse() 转换成对象。

    let parObj = JSON.stringify(obj)
    this.$router.push({
        path: '/detail',
        query: {
            'obj': parObj
    // 详情页
    JSON.parse(this.$route.query.obj)

    这个方法虽然可以传递对象,若数据少还好,数据多的话地址栏就很长了

    注意:在所有的子组件中获取路由参数是 $route 不是 $router

    以上 params 和 query 传参方式对比: