2017-09-20 5 views
3

일부 지연로드 모듈 (일부는 자체 라우터 콘센트가 있음)이있는 Angular CLI 응용 프로그램이 있습니다. 애플리케이션 루트에서 탐색 할 때 모든 경로에 액세스하는 데 문제가 없습니다. 그러나 게으른로드 된 모듈의 경로로 직접 연결하려고하면 브라우저가 존재하지 않는 폴더에서 응용 프로그램을로드하려고 시도하는 것으로 보입니다.각도가 중첩 된 라우터 콘센트가있는 지연 모듈을 직접로드합니다.

{ 
      path: 'A', loadChildren: 
      './A/A.module#AModule', 
      canActivate: [LoadGuardService] 
     } 

AModule 다음 경로에 대한이 있습니다 :

예를 들어, 루트 라우팅 모듈은 다음과 같이 보일 경로를 가지고 내가 처음부터 응용 프로그램을로드하는 경우 (실행중인

export const AModRoutes: Routes = [ 
    { 
    path: '', component: AHomeComponent, children: [ 
     { path: 'building', pathMatch: 'full', component: BuildingComponent }, 
     { path: 'sitewide', pathMatch: 'full', component: SitewideComponent }, 
     { path: 'spaces', pathMatch: 'full', loadChildren: '../spaces/spaces.module#SpacesModule' } 
    ] 
    } 
]; 

포트 4200), 클릭하여 127.0.0.1:4200/A/building으로 이동할 수 있지만이 동일한 URL로 직접 이동할 수는 없습니다. 이 잘못 기본 href 또는 뭔가를 설정하는 관련이 있는지 궁금

GET http://127.0.0.1:4200/es/inline.bundle.js net::ERR_ABORTED building:20 . . . GET http://127.0.0.1:4200/es/main.bundle.js 404 (Not Found) build:20

:

콘솔은이 같은 오류의 무리를 준다. 나는 최근에 CLI로 전환하여 루트 모듈 공급자에게 { provide: APP_BASE_HREF, useValue: '/' }을 추가하여 작동 시키도록해야했습니다. 이 질문을 쓰는 동안

뭔가 더 내가 발견 을 나는 A/building, 말,로 탐색하면, 내가 A/sitewide에 nvigate 있지만 B/ 또는 A/spaces에 있습니다. (, 그것의 대부분은 적어도)

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

import { LoadGuardService } from "./services/load-guard.service"; 

export const APPROUTES: Routes = 
    [ 
     { 
      path: 'A', loadChildren: 
      './A/A.module#AModule', 
      canActivate: [LoadGuardService] 
     }, 
     { 
      path: 'B', loadChildren: 
      './B/B.module#BModule', 
      canActivate: [LoadGuardService], 
      data: { byPhone: false } 
     }, 
... 

    ]; 

@NgModule({ 
    imports: [RouterModule.forRoot(APPROUTES)], 
    exports: [RouterModule], 
    providers: [LoadGuardService] 
}) 
export class AppRoutingModule { } 

이 명확하게하기 위해, 경로 배열의 생략은 실제 코드에없는 추가 루트 라우터 모듈 :이 CLI에

편집을 전환하기 전에 문제가 아니었다 . 그냥 스 니펫을 줄이기 위해

+0

LoadGuardService가 false를 반환 할 가능성이 있습니다 (하위 구성 요소가 활성화 된 서비스에 의존합니까?) 아니면 느슨하게뿐만 아니라 다른 경로 또는 다른 경로에서 RouterModule을로드하고있는 중일 수 있습니다. –

+0

LoadGuardService를 제거하고 항상 스텁을 반환하여 테스트했습니다. 나는 LoadGuardService가 false를 반환하면 내비게이션이 단순히 발생하지 않을 것이라고 생각하지만 대신 디렉토리가 아닌 A/building에서 애플리케이션을로드하려고 시도하는 것으로 보인다. AppRoutingModule을 가져 오기에 처음으로 배치하고 변경하지 않고 마지막에 배치하려고했습니다. –

+0

그리고 앱 라우팅에서'imports : [RouterModule.forRoot (routes)]'를 사용하고 있고 자녀에게'imports : [RouterModule.forChild (routes)]'를 사용하고 있습니까? 이것은 내가 결코 만났던 이상한 사람이다, 미안 나는 더 많은 도움이 아니다. –

답변

0

{ provide: APP_BASE_HREF, useValue: '/' }을 app.module에 추가해야한다는 것을 기억할 수는 없지만, 그렇게했을 때 나는 index.html에서 <base href="/">을 주석 처리했습니다 (당시에는 작동하는 것 같았습니다.). 그 줄의 주석을 풀었고 모든 것이 지금 작동 중입니다. 누군가 APP_BASE_HREF가하는 일을 설명 할 수 있습니까?