【发布时间】:2020-05-14 04:28:16
【问题描述】:
我在所有路由路径的开头都有一个可选的lang 参数,例如/:lang?/foo。
当我在 router-link 中使用 foo 路由传递 lang 参数时,它匹配该路由并正确地将 .router-link-active 类添加到 <a/>。
但是,在我的项目的许多地方,我没有向router-link 传递任何参数,而在全局路由器导航保护beforeEach 中,如果没有人通过,我将设置lang 参数。在这种情况下,router-link 不会添加活动类,因为它与路由不匹配,因为 to 属性中缺少参数。
如何让匹配逻辑忽略所有路由的可选参数,以便添加 .router-link-active 和 .router-link-exact-active 类?
这是我玩过的jsfiddle,我希望第一个链接是红色的。
以下是相关部分:
<router-link :to="{name: 'foo'}">/foo</router-link>
<router-link :to="{name: 'foo', params: {lang: 'en'}}">/en/foo</router-link>
routes: [
{
path: '/:lang?',
component: {
render(c) {
return c('router-view');
},
},
children: [
{
name: 'foo',
path: 'foo',
component: Foo
}
]
}
]
router.beforeEach((to, from, next) => {
if (!to.params.lang) {
const route = { ...to };
route.params = { ...route.params, lang: 'en'};
next(route);
} else {
next();
}
});
【问题讨论】:
标签: vue.js vue-router