【问题标题】:Same Component but Different Url Path in VueVue中相同的组件但不同的Url路径
【发布时间】:2020-06-22 23:43:41
【问题描述】:

我想为同一个组件 SingleProduct 设置不同的 url(Consumer 和 Seller),以下代码效果很好:

const routes = [
  {
    path: "/:name",
    name: "SingleProductSeller",
    component: SingleProduct
  },
  {
    path: "/seller/:name",
    name: "SingleProductConsumer",
    component: SingleProduct,
  },
]

除了一分为二,还有其他方法吗? 例如,是否可以使用以下参数以及如何创建别名?

  {
    path: "/:name",
    name: "SingleProduct",
    component: SingleProduct,
    alias: "/seller/:name/",
    props: true,
  },

谢谢。

【问题讨论】:

标签: vue.js url path routes vue-router


【解决方案1】:

您可以使用 vue-routeralias 功能。在docs 中有很好的解释。

但是,您应该尽可能避免这种情况,因为您使用的是动态路径片段,并且从概念上讲这是两条不同的路线,因此即使它们指向同一个组件,它们也应该是不同的路线。您将遇到书签问题 - 即使它们只是别名,页面也不会转换到相同的路线

如果你真的想避免 DRY,你应该使用简单的基于函数的抽象而不是依赖别名:

function makeSingleProductRoute(name, path) {
    return {
        name, path,
        component: SingleProduct
        // Reusable guards if required.
    };
}


const router = new VueRouter({
    routes: [
        makeSingleProductRoute("SingleProductConsumer", "/seller/:name"),
        makeSingleProductRoute("SingleProductSeller", "/:name")
    ]
});

【讨论】:

  • IMO,我会先执行 /seller 路由,因为它有更具体的匹配模式。见router.vuejs.org/guide/essentials/…
  • @Phil,确实,你是对的。卖家应该是第一位的。
  • 感谢您的回复。我之前读过文档,想知道是否允许使用 alias with params。正如我从其他地方读到的那样, vue-router 不支持带有参数的别名,并且无法从 Vue 网站找到其他信息。
  • @Qness,是的,没错。动态路径不适用于别名。
猜你喜欢
  • 2019-03-12
  • 2019-08-17
  • 1970-01-01
  • 2018-10-16
  • 1970-01-01
  • 1970-01-01
  • 2019-12-10
  • 1970-01-01
  • 2021-05-29
相关资源
最近更新 更多