Angular: использование сервиса для условного импорта модулей - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть служба, которую я использую для загрузки списка модулей:

@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 { }

Конечно, это неправильно, так как мне не нужно напрямую обращаться к моему сервису

Предложения?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

вы достигаете этого, используя 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]
},
0 голосов
/ 25 апреля 2018

Вы можете использовать canLoad охранник вместе с LazyLoading . Ваш сервис может быть вызван с canLoad

...