我正在尝试将我当前的站点迁移到vuejs。网站地图必须是:
/login
/signup
/password-reset
/browse
/search
... dozens of other routes由于其中一些路线分享了很多fx,我让它们成为母航线的子代:
[{ // public routes
path: '/',
component: Auth,
children: [
{ path: '/login', component: Login },
{ path: '/signup', component: Signup },
{ path: '/password-reset', component: PasswordReset },
]
},
{ // routes behind Authentication
path: '/',
component: Home,
children: [
{ path: '/browse', component: Browse },
{ path: '/search', component: Search }
]
}]问题很明显: Auth和Home基本组件现在在技术上是相同的路由路径,我得到了路由错误。由于我将有许多路线共享相同的基本组件和fx,我希望它们是这些抽象状态的子级。
问题1,:如何实现这些路由及其父抽象状态,而不需要向子节点添加所有包装逻辑?
问题2:如何使父状态()不能被路由,或者如果是,默认为子状态?
发布于 2017-06-21 00:39:12
当多个路由共享相同的路径时,数组中的第一个路由优先。所以你需要把回家的路线放在八月的前面。这样,/路径将始终匹配Home路由,而不是Auth路由。这也意味着它不可能直接路由到八月路线,这是你想要的。
如果不希望访问Home路由,则可以指定在完全匹配时应该发生的重定向:
{
path: '/',
component: Home,
redirect: '/browse', // Redirect to path, or
redirect: { name: 'browse' }, // Redirect to named route
children: ...
}如果您的Auth组件没有特定于auth的UI,您可能不想使用像这样的“抽象”路由来执行身份验证。关于如何在vue-路由器中实现这一点,有很多信息;有一种方法:
// Routes
{
path: '/profile',
component: Profile,
meta: { auth: true },
}
// Router hooks
router.beforeEach((to, from, next) => {
if (to.matched.some(route => route.meta.auth) && !authenticated) {
next('/login');
} else {
next();
}
});https://stackoverflow.com/questions/44663978
复制相似问题