2017-06-08 23 views
6

Khi tôi mở ứng dụng Angular 2 trong cửa sổ trình duyệt mới, tôi nhận được 10 mục nhập trong lịch sử trang trình duyệt. Điều này xảy ra trên bất kỳ trang liệt kê trong các bộ định tuyến và không có trang nào đó (ví dụ http://localhost:8080 hoặc http://localhost:8080/survey vv)Góc 2 - nhiều mục lịch sử khi tải trang

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'}, 
]; 

Tôi đang sử dụng bộ định tuyến 3.1.2

"@angular/router": "3.1.2", 

enter image description here

Tôi có tìm thấy một số similar question từ tháng 3 năm ngoái nhưng câu trả lời cho rằng nó đã được giải mã trong mã Angular rồi.

Cập nhật Theo yêu cầu, đây là mã AuthGuard

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

Tôi nghĩ rằng tôi cần một mẫu để xem qua, tôi chưa từng thấy điều này trong bất kỳ ứng dụng Góc nào của mình, vì vậy tôi không chắc chắn cách tạo lại sự cố này ... – MichaelSolati

+0

Nếu chúng tôi có thể xem các thành phần của bạn được liệt kê ở đó, sẽ dễ dàng hơn đưa ra một giải pháp hoặc ít nhất là một đầu mối, chỉ nghĩ rằng tôi có thể gợi ý ngay bây giờ là lắng nghe sự kiện tuyến đường, kiểm tra câu trả lời này https://stackoverflow.com/questions/33520043/how-to-detect-a- route-change-in-angular-2/38080657 # 38080657 –

+0

bạn đã thử cập nhật lên 4.2.0 chưa? –

Trả lời

3

tôi đã có một tình huống tương tự và tôi giải quyết nó bằng các tuyến đường lười tải Đó là bạn có thể tách các tuyến đường đến mô-đun khác nhau định tuyến quảng cáo trong tải tuyến đường chính như thi

TRÊN con đường chính

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

SO inthe sử dụng mô-đun bạn sẽ có

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

}) 
export class UserModule { 

} 

sau đó các module sử dụng định tuyến có

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

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

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

Thats làm thế nào tôi giải quyết vấn đề của tôi, tôi hy vọng điều này sẽ giúp.

NB: nhớ con đường chính để import.forRoot

Trong trường hợp này đảm bảo rằng trong module gốc (mô-đun probly ứng dụng bạn import module sử dụng)

@NgModule({ 
    declarations: [ 
    ], 

    imports: [ 

    UserModule, //in your case maybe use survey module 

    ], 

    }) 

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

Tôi đã xem qua các tài liệu về LazyLoading (https://github.com/AngularClass/angular-starter/wiki/[email protected]) nhưng không thể lấy đường dẫn trong thuộc tính loadChildren đến được chấp nhận, mặc dù nó hoạt động tốt trong một tuyên bố nhập khẩu trong cùng một tệp – Craig

+0

Nó không được ghi lại trong tài liệu chính thức nhưng được tìm thấy nếu ở đây: https://scotch.io/courses/routing-angular-2-applications/lazy-loading –

+0

Nó đã không cải thiện bất cứ điều gì tôi sợ.Mặc dù con đường làm việc tốt trong hàng nhập khẩu (khi được chứng kiến ​​bởi WebStorm tự động hoàn thành tên) vào lúc chạy, tôi nhận được "Không thể tìm thấy module" ./survey/survey.module '. " ******** nhập {SurveyModule} từ './survey/survey.module'; tuyến const: Tuyến đường = [ {path: '', thành phần: HomeComponent}, { đường dẫn: 'khảo sát', loadChildren: './survey/survey.module#SurveyModule' }, – Craig

Các vấn đề liên quan