vuejs 路由器中的可选参数

2022-08-30 01:54:28

我需要以两种方式路由到某个组件 - 一种带有参数,另一种没有。我已经搜索了可选参数,但不知何故找不到太多信息。

所以我的路线:

{
    path: '/offers/:member',
    component: Offers,
    name: 'offers',
    props: true,
    meta: {
        guest: false,
        needsAuth: true
    }
},

当我以编程方式使用参数调用它时,一切都很好

this.$router.push({ path: /offers/1234 });

但是,我还需要像这样通过导航来调用它

<router-link to="/offers">Offers</router-link>

组件接受属性offers

props: ['member'],

以及用作此类组件的组件

<Offers :offers="data" :member="member"></Offers>

现在,我设法让它工作的丑陋方式是复制路线,让其中一个不采取道具:

{
    path: '/offers',
    component: Offers,
    name: 'offers',
    props: false,
    meta: {
        guest: false,
        needsAuth: true
    }
},

它实际上有效,但我对它不满意 - 也在开发模式下vuejs警告我[vue-router] Duplicate named routes definition: { name: "offers", path: "/offers" }

当然,有一种方法可以在组件调用中执行可选参数?:member="member"


答案 1

只需添加一个问号即可使其成为可选的。?

{
    path: '/offers/:member?',
    ...
},

它适用于 Vue Router 2.0 及更高版本。

资料来源:https://github.com/vuejs/vue-router/issues/235#issuecomment-245447122


答案 2

对于匹配模式的高级路由,手册说

vue-router使用路径到正则表达式作为其路径匹配引擎,因此它支持许多高级匹配模式,例如可选的动态段,零个或多个/一个或多个要求,甚至自定义正则表达式模式。查看这些高级模式的文档,以及在 vue-router 中使用它们的示例。

正则表达式路径页面/手册 => https://github.com/pillarjs/path-to-regexp/tree/v1.7.0#parameters