Angular2在路由器数据中使用函数?

Angular2在路由器数据中使用函数?,angular,angular-ui-router,Angular,Angular Ui Router,我认为这个伪代码的问题应该很清楚。找不到任何解决方案。如何解决这个问题 当前工作路线: { path: ':xyzType', component: SuperSpecialComponent, canActivate: [AuthGuard], data: { /* ENUM 1 for XOR */ authPermissionType: authPermissionType["XOR"], permissions: [

我认为这个伪代码的问题应该很清楚。找不到任何解决方案。如何解决这个问题

当前工作路线:

{
    path: ':xyzType',
    component: SuperSpecialComponent,
    canActivate: [AuthGuard],
    data: {

      /* ENUM 1 for XOR */
      authPermissionType: authPermissionType["XOR"],

      permissions: [
        'add:xyzType1',
        'edit:xyzType1',

        'add:xyzType2',
        'edit:xyzType2'
      ]
    },
}
我希望从路由参数“xzyType”独立设置权限。应该是这样的:

{
    path: ':xyzType',
    component: SuperSpecialComponent,
    canActivate: [AuthGuard],
    data: {

      /* ENUM 1 for XOR */
      authPermissionType: authPermissionType["XOR"],

      permissions: function(this_route.param['xyzType']) {
          if(this_route.param['xyzType'] == 'type1' {
              return [
                  'add:xyzType1',
                  'edit:xyzType1'
              ]
          } 
          else if(this_route.param['xyzType'] == 'type2' {
              return [
                  'add:xyzType2',
                  'edit:xyzType2'
              ]
          } 
      }
    },
}

因此,我尝试为此构建一个解析器,但最终出现了另一个问题:

{
    path: ':xyzType',
    component: SuperSpecialComponent,
    canActivate: [AuthGuard],
    data: {

      /* ENUM 1 for XOR */
      authPermissionType: authPermissionType["XOR"],

      permissions: {
        "type1": [
          "add:xyzType1",
          "edit:xyzType1"
        ],
        "type2": [
          "add:xyzType2",
          "edit:xyzType2"
        ]
      }
    },
    resolve: {
      permissions: PermissionsResolver
    }
}
在解析器中,我检查路由参数并使用以下代码返回所需的权限:

switch(route.params[xyzType]) {
  case 'type1':
    return route.data['permissions']['type1'];

  case 'type2':
    return route.data['permissions']['type2'];
}

问题是AuthGuard已检查权限,即使解决尚未完成。有没有办法让AuthGuard等待权限更改?

我想你需要的是解析程序是的,你肯定想在这里使用解析。与角度解析相比,它们的详细程度实在太糟糕了,尤其是在UI路由器中。但是在整个框架中,同样的事情也可以说,你可以在
AuthGuard
Resolver
之间共享一个服务,当解析完成时,它会通知你。请不要将后续问题作为答案发布。请改为编辑你的问题并在那里添加信息。好的,我已经试了几个小时了。。。我他妈的怎么能得到一个服务,在解析器完成时通知一个可观察的服务?!