2017-06-08 13 views
6

新しいブラウザウィンドウでAngular 2アプリケーションを開くと、ブラウザページの履歴に10個のエントリが表示されます。これは、ルータに記載されている任意のページで、指定していないページ(すなわちhttp://localhost:8080またはhttp://localhost:8080/surveyなど)角度2 - ページの読み込み時に多数の履歴エントリ

const routes: Routes = [ 
    {path: 'survey', component: SurveyComponent, canActivate: [AuthGuard]}, 
    {path: 'survey/:id', component: SurveyComponent, canActivate: [AuthGuard]}, 
    {path: '', component: HomeComponent}, 
    {path: 'about', component: AboutComponent}, 
    {path: 'terms', component: TermsAndConditionsComponent}, 
    {path: 'map', component: MapComponent}, 
    {path: 'what-next', component: WhatNextComponent}, 
    {path: 'contact', component: ContactComponent}, 
    {path: '**', redirectTo: '', pathMatch: 'full'}, 
]; 

私が使用しているルータ私が持っている3.1.2

"@angular/router": "3.1.2", 

enter image description here

で発生します昨年3月からsimilar questionが見つかりましたが、回答はすでにAngularのコードで解決されたと主張しています。

更新 要求されたとして、ここで私は似たような状況があったと私はあなたが広告をルーティングする別のモジュールへのルートを分離することができている遅延ロードルート ことによってそれを解決し

import {Injectable} from '@angular/core'; 
import {AuthenticationService} from '../_services/index'; 
import {LoginModalService} from "../login_modal/login_modal.service"; 
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot} from '@angular/router'; 
import {Observable} from 'rxjs/Observable'; 

@Injectable() 
export class AuthGuard implements CanActivate { 

    constructor(private authentication: AuthenticationService, private loginModalService: LoginModalService) { 
    } 

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { 
     if (this.authentication.isAuthenticated()) { 
      return Observable.of(true); 
     } else { 
      this.loginModalService.toggleVisable(state.url); 
      return Observable.of(false); 
     } 
    } 
} 
+4

をimport.forRoot

へのメインルートを覚えていますコードベースを見て、私は角のアプリのいずれかでこれが発生していないので、私はこの問題を再現する方法がわからない... – MichaelSolati

+0

そこに記載されているコンポーネントを見ることができれば、解決策を提供するか、少なくとも手がかりを与えてください。私が今提案することができるのは、ルートイベントをリスンすることだけです。この回答を確認してください。https://stackoverflow.com/questions/33520043/how-to-detect-a- route-change-in-angular-2/38080657#38080657 –

+0

あなたは4.2.0にアップデートしようとしましたか? –

答えて

3

AuthGuardコードにあります主な経路ではTHI

のようなメインルート負荷

 { 
     path: 'dashboard', 
     component: DashboardComponent, 
     }, 
     { 
     path: 'user', 
     loadChildren: 'app/user/user.module#UserModule', //in user module 
     }, 

SO intheユーザモジュールは、youllの

@NgModule ({ 
    imports: [ 
    userRoutingModule //contains my user module routes 
    ] , 

}) 
export class UserModule { 

} 

を持っているし、ユーザーのルーティングモジュールは、私は私の問題を解決する方法

const userRoutes: Routes = [ 
     { path: '', component: UserComponent}, 
    ]; 

@NgModule({ 
    imports: [ 
    RouterModule.forChild(userRoutes) 
    ], 

    exports: [RouterModule], 
    providers: [] 
    }) 
export class userRoutingModule { } 

thatsのを持って、私はこのことができます願っています。

NB:私はサンプルを必要とすると思う(problyアプリモジュールは、ユーザーモジュールをインポートする)ルートモジュール内のことを確認してください。この場合、

@NgModule({ 
    declarations: [ 
    ], 

    imports: [ 

    UserModule, //in your case maybe use survey module 

    ], 

    }) 

    export class AppModule {} //this is in my root module 
+0

LazyLoading(https://github.com/AngularClass/angular-starter/wiki/[email protected])のドキュメントを見てきましたが、loadChildrenプロパティのパスを同じファイル内のimportステートメントでうまく動作しても、受け入れられるでしょう – Craig

+0

公式ドキュメントには書かれていませんが、iftはここにあります:https://scotch.io/courses/routing-angular-2-applications/lazy-loading –

+0

それは私が恐れていることは何も改善していません。実行時に(WebStormが名前をオートコンプリートすることによって目撃された)インポートでうまくいっているパスにもかかわらず、「モジュールが見つかりません./survey/survey.module」。 ******** import {SurveyModule} from '//survey/survey.module'; CONST経路:経路= [ {パス: ''、成分:HomeComponent}、{ パス: '調査'、 loadChildren './survey/survey.module#SurveyModule' }、 – Craig

関連する問題