angular - 在路线的“中间”带有硬编码组件的角度嵌套路线
问题描述
这个问题有一个 Stackblitz:https ://stackblitz.com/edit/angular-ivy-imdhhc 。该应用程序具有以下组件层次结构
app
home
foo
bar
baz
app
使用home
_<router-outlet></router-outlet>
home
使用foo
_<router-outlet></router-outlet>
foo
使用bar
_<app-bar></app-bar>
这按预期工作
- https://angular-ivy-imdhhc.stackblitz.io渲染
app
- https://angular-ivy-imdhhc.stackblitz.io/home渲染
home
- https://angular-ivy-imdhhc.stackblitz.io/home/foo渲染
foo
并且bar
因为<app-bar></app-bar>
是硬编码的
然而,虽然bar
被渲染,它的子组件却不是。bar
路由模块定义了一个嵌套路由来渲染组件baz
。
const routes: Routes = [
{
path: '',
component: BarComponent,
children: [
{
path: '**',
component: BazComponent,
},
],
},
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
})
export class BarRoutingModule {}
通配符用于尝试baz
渲染,但这不起作用。我想这与硬编码<app-bar></app-bar>
in foo
.
这应该工作吗?如果没有,有没有办法实现这一点而不必<router-outlet></router-outlet>
在组件层次结构的每个级别“链接”?
有关我要实现的目标的更多详细信息。
想象一下应用程序层次结构是
app
home
foo
bar
baz
qux
quux
...
not-foo
not-home
需要路由来提供以下顶级路径
/home
和/not-home
/home/foo
和/home/not-foo
但是,一旦/home/foo
被渲染,bar
必须始终被渲染并且bar
不应该在 URL(路径)中。此后,需要以下路线
/home/foo/baz
/home/foo/qux
/home/foo/quux
解决方案
在bar路由模块中,您可以通过在bar的 children 下添加路径匹配来强制baz组件渲染,如下所示:
const routes: Routes = [
{
path: 'bar',
component: BarComponent,
children: [
{
path: ':anyother',
component: BazComponent,
},
],
},
]
URL 将与/home/foo之后的任何段一起路由。所以/home/foo/anypath将呈现bazComponent。
另外,去掉标签
<app-bar></app-bar>
来自foo组件 HTML,因为路由是由bar的路由模块控制的。
推荐阅读
- python-3.x - 从另一个 Docker 容器连接到 neo4 驱动程序(在 Docker 容器中)
- c++ - 如何传递方法并使用可变数量的参数调用它
- spring-boot - Spring Boot 应用程序未启动
- java - json_value 函数,例如如何在 java 中创建方法
- android - 如何修复:Gradle 同步失败:不支持的方法:SyncIssue.getMultiLineMessage()
- sql - 需要一行中的所有列
- sql - 将 SQLiteStudio 数据库上传到 pgAdmin 4 Postgres 的问题
- asp.net - 没有 https 的 Azure AD 登录
- python-3.x - 在应用模式之前如何修改语言模型
- ruby-on-rails - 从 rails 4.2 升级到 rails6.0 时是否需要将迁移文件版本更改为 [6.0]