M Z*_*tra 5 javascript routes vue.js vue-router
我的 Vue.js 路由器有问题。正如标题所示,这个问题是关于只显示父路由页面的子路由。例如,有一个指向您的帐户详细信息的路径www.example.com/account。然后,在您的帐户中,您可以看到不同的项目,这些项目将与以下路线一起使用,www.example.com/account/project/foobar其中project/foobar是 的子路线/account,foobar是动态参数。现在,当您转到某个项目时,您希望看到该项目,但您仍然看到帐户页面。
这是我遇到的问题。我觉得一切都设置正确,但代码无论如何都显示在下面。
路由器.js
const routes = [
..., // other routes
{
path: '/account',
component: AccountPage,
meta: {
title: 'Your account'
},
children: [
{
path: 'project/:id',
component: ProjectPage,
props: true,
meta: {
title: 'Project'
}
}
]
}
];
const router = new VueRouter({
routes,
mode: 'history'
});
// Sets meta tags in the HEAD tag to, for example, change the title.
router.beforeEach((to, from, next) => {
const nearestWithTitle = to.matched.slice().reverse().find(r => r.meta && r.meta.title);
const nearestWithMeta = to.matched.slice().reverse().find(r => r.meta && r.meta.metaTags);
const previousNearestWithMeta = from.matched.slice().reverse().find(r => r.meta && r.meta.metaTags);
if(nearestWithTitle) document.title = nearestWithTitle.meta.title;
Array.from(document.querySelectorAll('[data-vue-router-controlled]')).map(el => el.parentNode.removeChild(el));
if(!nearestWithMeta) return next();
nearestWithMeta.meta.metaTags.map(tagDef => {
const tag = document.createElement('meta');
Object.keys(tagDef).forEach(key => {
tag.setAttribute(key, tagDef[key]);
});
tag.setAttribute('data-vue-router-controlled', '');
return tag;
})
.forEach(tag => document.head.appendChild(tag));
next();
});
Run Code Online (Sandbox Code Playgroud)
我四次检查了我是否使用了正确的组件,并且我 100% 确定我使用了正确的组件。不过,它只是继续显示帐户页面而不是项目页面。我确实注意到标题发生了变化,因为代码改变了元标记,所以这意味着它知道下一页是项目页面。我还检查了函数参数to包含的内容,很快就发现这就是它想要去的项目路线,这完全有道理。
项目页面.vue
<template>
<transition name="project-anim">
<div>
Foo BAR
</div>
< /transition>
</template>
<script>
import MeineProject from '../../components/meine/project';
export default {
components: {
MeineProject
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
直接转到 URL(不通过链接或其他任何内容进行路由导航),也只会显示帐户页面,因此我很确定这不是由于某种原因而无法正常工作的转换。控制台中没有错误或警告。
我完全没有选择。我希望你能帮助我。谢谢你的时间!:)
帐户页面需要<router-view>来渲染子路由。如果您不希望项目页面在帐户页面内呈现,那么它不应该是帐户页面的子路由。
您可能需要这样的路由配置:
{
path: '/account',
component: AccountPage,
meta: {
title: 'Your account'
},
},
{
path: 'project/:id',
component: ProjectPage,
props: true,
meta: {
title: 'Project'
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将项目路由设置为/account/project/:id,但它不会是帐户路由的子路由,即使它带有前缀/account。
| 归档时间: |
|
| 查看次数: |
1943 次 |
| 最近记录: |