gpt4 book ai didi

typescript - Vue Router 元字段

转载 作者:行者123 更新时间:2023-12-04 01:12:29 37 4
gpt4 key购买 nike

我想知道在将路由传递给 VueRouter 时是否可以定义自定义属性。例如,对于我的应用程序中的大多数路由,我想定义如下路由,我可以在其中将组件传递给可选属性“菜单”:

{ path: "/section-stack", component: SectionStack, menu: SectionMenu }

阅读 docs指向为此使用元字段,但这并没有达到我想要的并且导致更详细的路由。查看代码,传递给 VueRouter 的每个路由都是 RouteConfig 类型。是否可以修改我的 VueRouter 以便它可以传递不同类型的路由? IE。具有附加属性的 RouteConfig 类型。

最佳答案

我认为 meta 仍然是要走的路。我曾经用它创建了一个面包屑。我的路线如下所示:

  routes: [
{
path: '/',
name: 'home',
component: require('./routes/Home.vue'),
meta: {
history: [],
},
},
{
path: '/projects',
name: 'projects',
component: () => System.import('./routes/Projects.vue'),
meta: {
history: ['home'],
},
},
{
path: '/project/:token',
name: 'project',
component: () => System.import('./routes/project/Overview.vue'),
meta: {
text: (vue) => vue.projects[vue.$route.params.token] || vue.$route.params.token,
to: { name: 'project', params: { token: (vue) => vue.$route.params.token } } ,
history: ['home', 'projects'],
}
]

在我的 vue 组件中,我可以通过观看 $route 来访问元数据,并在加载组件时通过迭代 $router 对象,如下所示:

export default {
beforeMount() {
this.allRoutes = {};
this.$router.options.routes.forEach(route => {
if (route.name) {
let text = (route.meta && route.meta.text) || route.name;
this.$set(this.allRoutes, route.name, {
text: text,
to: (route.meta && route.meta.to) || { name: route.name }
}
);
}
}
);
},
data() {
return {
allRoutes: {},
currentList: [],
};
},
watch: {
'$route'(to, from) {
this.currentList = ((to.meta && to.meta.history).slice(0) || []);
this.currentList.push(to.name);
}
},
}

尤其是 beforeMount 中的 forEach 可能是构建菜单的解决方案,即 f.e.基于元对象中定义的角色。

关于typescript - Vue Router 元字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55162447/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com