vue Router 路由组件传参

主要目的为了解决不同路由在使用相同组件时高耦合,使用router中的props将路由和组件进行耦。
用法如下:

props 为布尔值
const User = {
  props: ['id'],
  template: '<div>User {{ id }}</div>'
}
const router = new VueRouter({
  routes: [
    { path: '/user/:id', 
      component: User, 
      props: true 
    },

    // 对于包含命名视图的路由,你必须分别为每个命名视图添加 `props` 选项:
    {
      path: '/name/:id',
      components: User,
      props: true
    }
  ]
})
// xxx/:id 中id可以在组件的props中进行获取并使用

tips:当props为true时路由传递的参数router.params 将被设置为组件的属性 。

props 为对象模式
const User = {
  props: ['newsletterPopup'],
  template: '<div>User {{ newsletterPopup }}</div>'
}
const router = new VueRouter({
  routes: [
    { path: '/user/:id', 
      component: User, 
      props: {newsletterPopup:'user'}
    },

    // 对于包含命名视图的路由,你必须分别为每个命名视图添加 `props` 选项:
    {
      path: '/name/:id',
      components: User,
      props: {newsletterPopup:'name'}
    }
  ]
})
// newsletterPopup可以在组件的props中进行获取并使用

tips:当props为对象时会被设置为组件的属性可以直接通过组件的props 进行获取。

props 为函数模式
const User = {
  props: ['newsletterPopup'],
  template: '<div>User {{ newsletterPopup }}</div>'
}
const router = new VueRouter({
  routes: [
    { path: '/user/:id', 
      component: User, 
      props: (route)=>({newsletterPopup:route.query.q})
    },

    // 对于包含命名视图的路由,你必须分别为每个命名视图添加 `props` 选项:
    {
      path: '/name/:id',
      components: User,
      props: (route)=>({newsletterPopup:route.query.q})
    }
  ]
})
// url: /xxx?q=test 会将 {newsletterPopup:test}传送给组件,组件的props中进行获取并使用

tips:你可以创建一个函数返回props。这样你便可以将参数转换成另一种类型,将静态值与基于路由的值结合等等

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容