首页 > 解决方案 > 未在子延迟加载的路由上调用父解析器

问题描述

我正在尝试根据不同的用户角色权限设置侧栏路线。设置侧栏路线的代码在站点解析器服务中。我在父路径中调用了它,我认为也应该为其子路径调用。但是,只有当我刷新特定的子路由时,才会调用此解析器。

这是我的站点路由服务的示例:

{
path: ':siteId',
resolve: { site: SiteResolverService },
children: [
  // ... other child routes
  {
    path: 'jsa-training-user-assigned-jsa',
    loadChildren: () => import('../jsa-quiz/jsa-quiz.module').then(m => m.JsaQuizModule),
    canActivate: [RoleGuardService],
    data: { expectedRole: [UserRole.SystemAdmin, UserRole.JsaCreator, UserRole.SiteAdmin, UserRole.PasscodeUser] },
    runGuardsAndResolvers: 'always'
  },
  // ... other child routes
]

在这条路线上,我希望在不刷新的情况下调用解析器,所以我在下面尝试过,但没有工作。

runGuardsAndResolvers: '总是'

标签: angularangular8angular-routingangular-resolver

解决方案


当您刷新子路由时会调用解析器,因为触发了整个路由树,而从父路由访问子路由只会触发子路由。

您仍然可以通过访问以下内容在子组件中获取父解析器的结果route.parent

子组件.ts

import { ActivatedRoute } from '@angular/router';

constructor(private route: ActivatedRoute) {}

ngOnInit() {
  console.log(this.route.parent.snapshot.data);
}

推荐阅读