отложенная загрузка angular 2 — маршруты с сервера

#ajax #angular #angular2-routing

#ajax #angular #angular2-маршрутизация

Вопрос:

Я работал над проектом Angular 2 с использованием отложенной загрузки. Это работает хорошо, но мне нужно получить имя модуля с сервера, а затем создать маршрут, но он не работает.

Вот что у меня есть:

 import { Routes, RouterModule } from '@angular/router';

function getRoutes(): Routes{
  let x: any = [
         {path: '', redirectTo: 'welcome', pathMatch: 'full'}, 
         {path: 'backend', loadChildren: 'app/backend/backend.module'}
      ]  
  return x;
}

export const routes: Routes = routess();

export const routing = RouterModule.forRoot(routes);
  

И вот, что мне нужно:

 import { Routes, RouterModule } from '@angular/router';

function getRoutes(): Routes{
 let x: any;

 $.get( "api/getRoutes", function( data ) {
   x = data; //object array from server
 }); 
  return x;
}

export const routes: Routes = routess();

export const routing = RouterModule.forRoot(routes);
  

Проблема в том, что функция getRoutes не ожидает результата сервера и возвращает пустые данные.

Есть ли какой-нибудь способ дождаться данных сервера, а затем добавить данные в маршруты?

Ответ №1:

Используйте NgModule только для базовой настройки маршрутизации ( /welcome и т. Д.), Затем где-нибудь еще в вашем приложении загружайте маршруты и обновляйте конфигурацию маршрутизатора. Затем вы можете использовать resetConfig() :

 this.http.get('/api/getRoutes')
  .subscribe(config => this.router.resetConfig(config))