javascript - 基于路由路径的深层嵌套路由和不同组件渲染
问题描述
我的 routes.js 文件中有深层嵌套路由。正如您在下面的代码中看到的那样,我必须根据路由渲染不同的组件(如果路由是产品,我需要渲染 Products.vue 组件,但如果路由更深入,我需要渲染包含模板的 EmptyRouterView.vue 组件,<router-view></router-view>
这样我就可以渲染子路由组件)。
{
path: '/products',
name: 'products',
component: {
render(c) {
if (this.$route.name === 'products') {
return c(require('pages/Products/Products.vue').default)
} else {
return c(require('components/EmptyRouterView.vue').default);
}
}
},
meta: {
requiresAuth: true,
allowedPositions: '*'
},
children: [
// Scan product to get info
{
path: '/products/search-product',
name: 'search-product',
component: () => import('pages/Products/SearchProduct.vue'),
meta: {
requiresAuth: true,
allowedPositions: '*'
}
},
....
]
}
我想知道是否有一些简短或更好的方法可以做到这一点?例如(我知道我不能在箭头函数中调用它)这样的东西?
component: () => {
this.$route.name === 'products' ? require('pages/Products/Products.vue').default : require('components/EmptyRouterView.vue').default
}
或者你看看是否有可能完全以其他方式做到这一点?
如果您需要任何其他信息,请告诉我,我会提供。谢谢!
解决方案
您可以创建另一个.vue
-file 并在 ( <cmp-1 />
& <cmp2 />
) 中包含两个组件。然后您可以使用另一个-tagif
在模板内构建您的-statement :template
<template v-if="boolean">
<cmp-1 />
</template>
<template v-else>
<cmp-2 />
</template>
if 取决于您的路线。
推荐阅读
- sms - 更改短信验证文字显示
- ios - 我可以在 UIMenuItem 的标题中添加 NSAttributedString 而不是 String 吗?
- c# - 为什么不执行比较 WPF ImageSources 的 if 语句?
- c - 我在哪里指定要在 FFI for Rust 中链接到的文件名?
- r - 如何计算特定季度的几何平均值
- python - 无法装饰第三方只读功能,如何包装它以获得附加功能?
- math - N 个点在欧几里得平面上给出。对于每个点,找到它自己和其他点之间的最小距离
- python - 如何在对其应用精美的索引过滤器的同时将数组的一列放入一个新的数组中?
- python - TensorFlow 2.0 Keras:如何为 TensorBoard 编写图像摘要
- python - 在没有凭据的情况下使用 Python Google Storage Client