LazyLoading和配置角度NgModule

时间:2017-04-27 14:30:42

标签: angular lazy-loading ng-modules

我有一个模块' 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而在组件中启用C并且既不生成2个不同的模块,而是考虑在通过.forChild(选项)加载时配置DeviceModule

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

谢谢!

1 个答案:

答案 0 :(得分: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

 }
}

docs:https://angular.io/api/router/CanActivate