0

我有一个模块“DevicePreview”,它有一些路由,可以从根目录和另一个模块“内容”内部显示。

当从根 DevicePreview 调用时,路由 /a、/b 和 /c 可用,当从 Content 调用时,它具有 /a、/b 和 /z。

现在我正在导出 2 个这样的路由数组(名称是伪造的):

export const DEVICE_ROOT_ROUTES: Routes = [
  {
    path: 'a',
    component: DeviceAComponent
  },  {
    path: 'b',
    component: DeviceBComponent
  },  {
    path: 'c',
    component: DeviceCComponent
  }
];

export const DEVICE_CONTENT_ROUTES: Routes = [
  {
    path: 'a',
    component: DeviceAComponent
  },  {
    path: 'b',
    component: DeviceBComponent
  },  {
    path: 'z',
    component: DeviceZComponent
  }
];

现在我想把它移到延迟加载的模块中。AFAIK 延迟加载模块我必须这样做:

 {
    path: 'device',
    loadChildren: 'app/+device/device.module#DeviceModule'
  }

因为我不想在根目录中启用 Z 也不想在 Component 中启用 C 并且既不想生成 2 个不同的模块,所以我正在考虑在通过 .forChild(options) 加载时配置 DeviceModule

延迟加载时如何调用 forChild?我也可以考虑其他方法。

谢谢!

4

1 回答 1

0

我不确定我是否遵循您要完成的任务,但是您听说过 AuthGuard 吗?例如,您可以使用 canActivate 来验证是否可以访问路由。

前任:

{ 
        path: 'device', 
        loadChildren: 'app/+device/device.module#DeviceModule', 
        canActivate: [AuthGuard] 
},

接着:

@Injectable()
export class AuthGuard implements CanActivate {

constructor() {}

 canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) 
 {
   //Your logic here to check if for example the module trying
   //to access the route is actually allowed to do that

 }
}

文档:https ://angular.io/api/router/CanActivate

于 2018-05-14T20:58:11.750 回答