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にすることができます。これは、CLI

EDITに切り替える前に、問題ではありませんでした。明確にするために(少なくともそれのほとんど、)ルートルータモジュールの追加

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

、ルート・アレイ内の省略記号は、実際のコードではありません。スニペットを短くするだけです

+0

LoadGuardServiceがfalse(サブコンポーネントがアクティブになっているサービスに依存しているかどうか)を返す可能性がありますか?または、RouterModuleが遅れているか、 –

+0

私はLoadGuardServiceを削除してスタブして、常にtrueを返すようにテストしました。私はLoadGuardServiceがfalseを返していたと思うが、ナビゲーションは単に起こらないだろうが、代わりにディレクトリではないA/buildingからアプリケーションをロードしようとしているようだ。 AppRoutingModuleを最初に配置し、インポートに最後に置きましたが、変更はありません。 –

+0

あなたのアプリのルーティングでは 'import:[RouterModule.forRoot(routes)]'を使っていて、 'imports:[RouterModule.forChild(routes)]を使っている子供では?これは私が決して走っていない奇妙なものです、申し訳ありません、私はそれ以上の助けではありません。 –

答えて

0

いつも私は{ provide: APP_BASE_HREF, useValue: '/' }をapp.moduleに追加しなければなりませんでしたが、私がそれをしたとき、私は<base href="/">をindex.htmlにコメントアウトしました)。私はその行のコメントを外し、すべてが今働いています。誰かがAPP_BASE_HREFのしくみを説明できますか?

関連する問題