Угловая Динамическая РОУТИНГ и Ленивая загрузка - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь динамически создавать свои угловые маршруты из базы данных. Я как-то добился этого.

Я следовал за AppIntializer для того же.

App.module.ts ....

providers:[...{
        provide: APP_INITIALIZER,
        useFactory: AppInitializerFn,
        multi: true,
        deps: [AppConfigService,RouteConfigService]
      }...]


  export const AppInitializerFn = (
    appConfig: AppConfigService,
    routeConfigService:RouteConfigService) => {
    return () => {
      return appConfig.loadAppConfig().then(()=>{
        return  routeConfigService.configure();
      });
    };
  };

 configure() {
    appRoutes[1].children= [];
    return this.http.get('/assets/data/menu.json').toPromise()
    .then((data:Array<any>) => {

      data.forEach((x:any)=>{
        appRoutes[1].children.push({path:x.path,
          loadChildren: this.appConfig.getConfig().AppSpecificComponentURL+x.compPath
        });

      });

      var router: Router = this.injector.get(Router);
      router.resetConfig(appRoutes);
      console.log(appRoutes)
    });
  }

menu.json

 [
          { "path": "dashboard", "compPath":"dashboard/dashboard.module#DashboardModule","default":true},
          { "path": "customer", "compPath":"customer/customer.module#CustomerModule"},
          { "path": "employee", "compPath":"employee/employee.module#EmployeeModule"},
          { "path": "supplier", "compPath":"supplier/supplier.module#SupplierModule"}
    ]

Теперь проблема в том, что загруженные Lazy модули даже не компилируются и поэтому получают ошибку «Не удается найти модуль» ./src/app/app-specific/employee/employee.module"

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 06 июля 2018

Это неправильный способ настройки динамических маршрутов. вызов http-запроса из app.module.ts - все равно что убить Angular Сначала вы должны подписаться на динамическое меню в служебном файле. Затем вы получите такие данные [ {"path": "dashboard", "compPath": "dashboard / dashboard.module # DashboardModule", "default": true}, {"path": "customer", "compPath": "customer / customer.module # CustomerModule"}, {"path": "employee", "compPath": "employee / employee.module # EmployeeModule"}, {"путь": "поставщик", "compPath": "поставщик / поставщик.module # SupplierModule"} ];

let x = selected Array;

let appRoutes = [];
 x.forEach(val => {
      appRoutes.push({
          path: val.path,
          loadChildren: val.compPath
      };
  });

затем импортируйте так: RouterModule.forRoot (AppRoutes) в app.module.ts

Это просто голое представление о рабочем процессе. надеюсь, что вы понимаете. Кроме того, использование обещания в угловых не лучшая практика;

...