角路由器解析器-重新加载时从父级获取参数

时间:2018-08-21 10:18:22

标签: angular angular-routing angular-resolver

我有一条这样的路线,带有一个子路线的解析器。

 {
        path: 'organizations/:oid',
        component: AdminOrganizationComponent,
        children: [
          {
            path: 'profile',
            component: AdminOrganizationProfileComponent,
            resolve: { organization: OrganizationResolver }
          },
          { path: '', redirectTo: 'profile', pathMatch: 'full' }
        ]
      },

解析器看起来像这样

@Injectable()
export class OrganizationResolver implements Resolve<Observable<Organization>> {
  private activeOrganization: Organization;
  constructor(private route:ActivatedRoute) {}

  setUser(organization: Organization) {
    this.activeOrganization = organization;
  }

  resolve() {
    return of(this.activeOrganization);
  }
}

在导航至路线之前,我先使用该服务来设置所选的组织。

  edit(organization) {
    this.organizationResolver.setUser(organization);
    this.router.navigate(['/admin/organizations', organization.id]);
  }

到目前为止,它已按预期工作,我可以使用snapshot.data来获取选定的组织。

现在我重新加载路线

  

/ organisations / 12345 /个人资料

我希望解析器检查是否存储了activeOrganization。如果不是,则应该通过http.get12345的{​​{1}}来检索它。

我的问题是我不知道可以使用哪种工具来检索参数。通常,在组件中,我可以简单地使用id 但是在这种情况下,注入的activatedRoute.parent.paramsactivatedRoute.parent

我认为,由于我已经在根目录中提供了解析器,所以null是有意义的,但是注销快照后,我在父级和parent=null中都得到了null

1 个答案:

答案 0 :(得分:1)

  

ActivatedRouteSnapshot包含有关路线的信息   与在特定时刻加载到插座中的组件相关联   及时。 ActivatedRouteSnapshot也可以用于遍历   路由器状态树。

import { Resolve, ActivatedRouteSnapshot } from '@angular/router';

  resolve(route: ActivatedRouteSnapshot) {
    let id: any = route.params['id'];
  }