angular - Angular:如何在路由上声明条件组件
问题描述
我正在尝试以角度声明一个“动态”路由组件。
这是我的模块
const routes: Routes = [
{
path: ':machine', component: LayoutComponent,
children: [
{
path: '', component: (() => {
return IsServerCondition ? MonitoringServerComponent : MonitoringClientComponent;
})()
},
]
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class MonitoringRoutingModule { }
我想根据父路径路由的参数 :machine 更改要显示的组件。我该怎么做?
解决方案
如果您已经知道参数 :machine 的预定义值,您可以使用静态路由映射到每个组件
如果您需要发出网络请求,您当然可以使用发出网络请求的“虚拟”组件,然后根据来自后端的响应*ngIf or *ngSwitch
来查看要加载的组件。
模板
<app-client-component *ngIf="serverCondition$ | async; else server"></app-client-component>
<ng-template #server>
<app-server-component></app-server-component>
</ng-template>
打字稿
@Component({…})
export class DummyComponent implements OnInit {
serverCondition$ = this.actRoute.paramMap.pipe(
// for direct comparison
map(params => param.get('machine') === 'red')
// or for a network request result
switchMap(params => this.service.checkBackend(param.get('machine'))),
map(response => response === 'red')
);
constructor(
private actRoute: ActivatedRouteSnapshot,
private service: BackendService
) {}
}
推荐阅读
- plsql - “ORA-24344:编译成功”错误是什么意思?
- c# - NoesisGUI - 在 Noesis.Image 元素中加载 PNG
- hibernate - 在 HQL 中减去日期
- angular - angular2 从动态子级向父级发出事件
- r - Sum of consecutive same values
- vba - vba从listobject获取没有重复的列表
- tensorflow - 如何为 tf.contrib.learn.DNNRegressor 选择参数
- python - 根据最后一行获取新值并检查 ID
- r - 根据 data.table 上的月份值计算季度值
- android-studio - Android Studio 中的 Flutter 热重载