Angular : 使用服务有条件地导入模块
Angular : using a service to conditionnally import modules
我有我用来加载模块列表的服务:
@Injectable()
export class MyService {
public allowedModules: any = this.modulesFilter();
constructor() {
}
public modulesFilter() {
const testPef = true;
const modulesList= [];
if (testPef === true) {
modulesList.push(MyFirstModule);
} else {
modulesList.push(MySecondModule);
}
return modulesList;
}
}
然后在我的模块文件中,我想这样使用它:
@NgModule({
imports: [
CommonModule,
MyService.allowedModules // THIS IS WRONG
],
declarations: [],
providers: [
MyService
],
exports: [
]
})
export class MyModule { }
当然这是错误的,因为我不需要直接访问我的服务
有什么建议吗?
您可以使用 canLoad
guard along with LazyLoading。可以从 canLoad
调用您的服务
你使用 lazyLoading 实现了
export class LoadGuard implements CanLoad {
constructor(private myService : MyService , private router: Router) {
}
canLoad(route: Route): boolean {
if (this.myService.canBeLoaded()) {
return true;
} else {
return false;
}
}
{
path: 'test',
loadChildren: 'app/test/test.module#TestModule',
canLoad: [LoadGuard]
},
我有我用来加载模块列表的服务:
@Injectable()
export class MyService {
public allowedModules: any = this.modulesFilter();
constructor() {
}
public modulesFilter() {
const testPef = true;
const modulesList= [];
if (testPef === true) {
modulesList.push(MyFirstModule);
} else {
modulesList.push(MySecondModule);
}
return modulesList;
}
}
然后在我的模块文件中,我想这样使用它:
@NgModule({
imports: [
CommonModule,
MyService.allowedModules // THIS IS WRONG
],
declarations: [],
providers: [
MyService
],
exports: [
]
})
export class MyModule { }
当然这是错误的,因为我不需要直接访问我的服务
有什么建议吗?
您可以使用 canLoad
guard along with LazyLoading。可以从 canLoad
你使用 lazyLoading 实现了
export class LoadGuard implements CanLoad {
constructor(private myService : MyService , private router: Router) {
}
canLoad(route: Route): boolean {
if (this.myService.canBeLoaded()) {
return true;
} else {
return false;
}
}
{
path: 'test',
loadChildren: 'app/test/test.module#TestModule',
canLoad: [LoadGuard]
},