2016-09-26 19 views
5

Pracuję nad aplikacją internetową z dwoma modułami najwyższego poziomu i kilkoma modułami pod każdym z nich. Przykład:Angular2 nie może znaleźć modułu zagnieżdżonego

  • publicznego

    • rejestracja
    • logowanie
  • portal

    • dashboard
    • Wynika
    • nominacje

Każdy z modułów zagnieżdżonych ma jeden lub więcej potencjalnych tras, usług i komponentów. Moduły publiczne i portalowe mają również inne wymagania dotyczące układu.

Co chciałbym zrobić, to podzielić mój kod na moduły dla każdej głównej sekcji powyżej. Jednak, gdy próbuję załadować moduł jako dziecko innej trasie, pojawia się błąd stwierdzając modułu nie można znaleźć:

error_handler.js:46 
EXCEPTION: Uncaught (in promise): Error: Cannot find module './dashboard/dashboard.module'. 

Oto moje pliki routingu:

/app/app.routing.ts 

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

export const appRouting: ModuleWithProviders = RouterModule.forRoot([ 
    { 
    path: 'portal', 
    loadChildren: 'portal/portal.module#PortalModule' 
    }, 
    { 
    path: '', 
    loadChildren: 'public/public.module#PublicModule' 
    } 
]); 


/app/portal/portal.routing.ts 

import { ModuleWithProviders } from '@angular/core'; 
import { Routes, RouterModule } from '@angular/router'; 
import { PortalComponent } from './portal.component'; 

export const portalRouting: ModuleWithProviders = RouterModule.forChild([ 
    { 
    path: '', 
    component: PortalComponent, 
    children: [ 
     { 
     path: 'dashboard', 
     loadChildren: './dashboard/dashboard.module#DashboardModule' 
     } 
    ] 
    } 
]); 

Moduł "panel" żyje na: /app/portal/dashboard/dashboard.module.ts, ale bez względu na to, do czego ustawię ścieżkę modułu w loadChildren, nie może go znaleźć.

Co robię źle? Używam WebPack zamiast SystemJS.

+0

Czy możesz dodać plik 'systemjs.config.js'? – Supamiu

+0

@Supamiu Przepraszam, zapomniałem wspomnieć o używaniu pakietu WebPack – Brandon

+0

Nie sądzę, że problem pochodzi stąd, ale twoja ścieżka do portalu PortalRouting powinna być pustą ścieżką, ponieważ "portal" już jest w aplikacji "Oddając się" –

Odpowiedz

1

Korzystanie z ładowarki obietnicy es6 wydaje mi się skuteczne. Oto moje routery do tego punktu ...

app/app.routing.ts 
import { ModuleWithProviders } from '@angular/core'; 
import { Routes, RouterModule } from '@angular/router'; 

export const appRouting: ModuleWithProviders = RouterModule.forRoot([ 
    { 
    path: 'portal', 
    loadChildren:() => require('es6-promise!./portal/portal.module')('PortalModule') 
    }, 
    { 
    path: '', 
    loadChildren:() => require('es6-promise!./public/public.module')('PublicModule') 
    } 
]); 

app/portal/portal.routing.ts 
import { ModuleWithProviders } from '@angular/core'; 
import { Routes, RouterModule } from '@angular/router'; 
import { PortalComponent } from './portal.component'; 

export const portalRouting: ModuleWithProviders = RouterModule.forChild([ 
    { 
    path: 'portal', 
    component: PortalComponent, 
    children: [ 
     { 
     path: 'dashboard', 
     loadChildren:() => require('es6-promise!./dashboard/dashboard.module')('DashboardModule') 
     }, 
     { 
     path: 'results', 
     loadChildren:() => require('es6-promise!./results/results.module')('ResultsModule') 
     } 
    ] 
    } 
]); 

app/portal/dashboard/dashboard.routing.ts 
import { ModuleWithProviders } from '@angular/core'; 
import { Routes, RouterModule } from '@angular/router'; 
import { DashboardComponent } from './dashboard.component'; 

export const dashboardRouting: ModuleWithProviders = RouterModule.forChild([ 
    { 
    path: '', 
    component: DashboardComponent 
    } 
]); 

i widzę prawidłową moc moich <router-outlet> tagów.

0

Poprawną ścieżką do modułu deski rozdzielczej będzie app/portal/dashboard/dashboard.module.

Z jakiegoś powodu webpack potrzebuje bezwzględnej ścieżki w tym przypadku. Nie zapomnij zrestartować serwera po zmianie ścieżki.

+0

Próbowałem tego podejścia i otrzymałem ten sam wynik.Jeśli jednak użyję programu ładującego es6-promise, zadziała on zgodnie z oczekiwaniami. – Brandon

+0

Czy zrestartowałeś serwer? W moim przypadku zadziałało to dopiero po tym. –

+0

Tak, i nadal mam ten sam wynik. – Brandon

Powiązane problemy