美文网首页
vue Router 路由组件传参

vue Router 路由组件传参

作者: 蜕变最美的你 | 来源:发表于2020-07-02 10:12 被阅读0次

    主要目的为了解决不同路由在使用相同组件时高耦合,使用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。这样你便可以将参数转换成另一种类型,将静态值与基于路由的值结合等等

    相关文章

      网友评论

          本文标题:vue Router 路由组件传参

          本文链接:https://www.haomeiwen.com/subject/uqslqktx.html