前言:vue组件之间的传值我已经写过一篇博客了,详见https://www.cnblogs.com/shijianblog/p/12525017.html,这篇主要讨论路由传参。

现有如下场景,点击父组件的li元素跳转到子组件中,并携带参数,便于子组件获取数据。
父组件中:

 1 <li v-for="article in articles" @click="getDescribe(article.id)"> //这里随意

methods:

方案一:

1       getDescribe(id) {
2         //   直接调用$router.push 实现携带参数的跳转
3         this.$router.push({
4           path: `/describe/${id}`,
5         })        

需要对应路由配置如下:

   {
     path: '/describe/:id',
     name: 'Describe',
     component: Describe
   }

很显然,需要在path中添加/:id来对应 $router.push 中path携带的参数。在子组件中可以使用来获取传递的参数值。

this.$route.params.id

方案二:

父组件中:通过路由属性中的name来确定匹配的路由,通过params来传递参数。

       this.$router.push({
          name: 'Describe',
          params: {
            id: id
          }
        })

对应路由配置: 这里可以添加:/id 也可以不添加,不添加数据会在url后面显示,不添加数据就不会显示

  {
     path: '/describe',
     name: 'Describe',
     component: Describe
   }

子组件中: 这样来获取参数

this.$route.params.id

方案三:

父组件:使用path来匹配路由,然后通过query来传递参数
这种情况下 query传递的参数会显示在url后面?id=?

    this.$router.push({
          path: '/describe',
          query: {
            id: id
          }
    })

对应路由配置:

   {
     path: '/describe',
     name: 'Describe',
     component: Describe
    }

对应子组件: 这样来获取参数

this.$route.query.id

注意:

对于方案二有些问题需要注意以下: 

需要在路由配置后面添加对应的参数即 需要添加/:id
如果不添加:id数据会在刷新的时候消失。

当然选择不选择是你的事情,各有优劣,加id的话会在url里面显示出来参数,这个可能是一部分人不想要的~

总结:我个人比较推荐第三种方案,话不多说,贴一下实际项目中的应用代码:

  父组件路由跳转:

        this.$router.push({
              name: "石健ex",//当然这里id、name都可以的
              query: { data: item}
        });    

   路由配置:

    {
          path:'/ex',
          name:"石健ex",        
          component:resolve=>require(['@/views/homepage/ex.vue'],resolve),
    },

  子组件获取data:注:写在生命周期里页面加载完成之前,如mounted()

this.dataItem = this.$route.query.data;