2017-10-18 70 views
2

我的代碼:當我執行此代碼angular2路由器導航不組件加載正確如下圖所示

googleClick(): void { 
    this._auth.login('google').subscribe(
     (data: any) => { 
      console.log('google server data ' + JSON.stringify(data)); 
      this.loginService.registerUser(data.email, data.name, '0').subscribe(res => { 
       if (res.status === '200') { 
        this.storage.store('user_token', res.data.user_token); 
        this.storage.store('user_email', data.email); 
        this.storage.store('user_img', data.image); 
        this.storage.store('user_first_name', res.data.user_name); 
        this.storage.store('user_id', res.data._id); 
        this.storage.store('user_paltform_login', 0); 
        this.router.navigate(['/home']); 
       } 

      }); 
     }); 
} 

,它加載的家(目前)的路線,並在後臺登錄(過去)路線兩者。它看起來怪異如下圖所示:
enter image description here

APP-routing.module.ts

const routes: Routes = [ 
    {path: '', redirectTo: '/login', pathMatch: 'full' }, 
    {path : 'home', component : HomeComponent }, 
    {path : 'login', component : LoginComponent}, 
    {path : 'foodtrucks', component : FoodComponent}, 
    {path : ':user_name/order-history', component : OrderHistoryComponent}, 
    {path : 'cart' , component : CartComponent}, 
    {path : 'payment', component : PaymentComponent}, 
    {path : ':order_id/order-details', component : OrderDetailsComponent}, 
    {path : 'food-info', component : FoodInfoComponent}, 
    {path : 'thank-you', component : ThankYouComponent} 
]; 

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

app.component.ts

@Component({ 
    selector: 'my-app', 
    template: '<router-outlet></router-outlet>', 
    styleUrls: ['./app.component.css'] 
}) 

export class AppComponent { 
} 

home.component.ts

@Component({ 
    selector: 'my-home', 
    templateUrl : '../../template/home.html', 
    styleUrls : ['../../css/home.css'] 
}) 


export class HomeComponent implements OnInit { 
    food: any= []; 
    itemList: any = []; 
    user_name: any; 
    user_email: any; 
    user_image: any; 
    myStyle: any = { 
     width: '0px' 
    }; 

    constructor(private router: Router, private _homeService: HomeService, 
    private _storage: LocalStorageService, private winRef: WindowRef) { 
     console.log('Window object', winRef.nativeWindow); 
     // winRef.nativeWindow.alert('it is loaded'); 
    } 

    ngOnInit(): void { 
     this.user_name = this._storage.retrieve('user_first_name'); 
     this.user_email = this._storage.retrieve('user_email'); 
     this.user_image = this._storage.retrieve('user_img'); 
     this._homeService.getPopularItmes().subscribe(res => { 
     if (res.status === '200') { 
      let food = res.data; 
      for (let value of food) { 
       for (let item of value.item_list){ 
        this.itemList.push(item); 
       } 
      } 
     } 
    }); 
} 


    openNav(): void { 
     console.log('open nav clicked'); 
     this.myStyle.width = '230px'; 
    }; 

    closeNav(): void { 
     this.myStyle.width = '0px'; 
    }; 

    tabClicked(): void { 
     this.router.navigate(['/foodtrucks']); 
    }; 

    loadCart(): void { 
     this.router.navigate(['/cart']); 
    }; 
} 

login.component.ts

@Component({ 
    selector : 'my-login', 
    templateUrl : '../../template/login.html', 
    styleUrls : ['../../css/login.css'] 
}) 

export class LoginComponent { 

    constructor(private router: Router, public _auth: AuthService, 
     private storage: LocalStorageService, private loginService: LoginService) { 
    } 

    FBLogin(): void { 
     this._auth.login('facebook').subscribe(
      (data: any) => { 
       console.log(data); 
      } 
     ); 
     // this.router.navigate(['/home']); 
    } 

    googleClick(): void { 
     this._auth.login('google').subscribe(
      (data: any) => { 
       console.log('google server data ' + JSON.stringify(data)); 
       this.loginService.registerUser(data.email, data.name, '0').subscribe(res => { 
       if (res.status === '200') { 
        this.storage.store('user_token', res.data.user_token); 
        this.storage.store('user_email', data.email); 
        this.storage.store('user_img', data.image); 
        this.storage.store('user_first_name', res.data.user_name); 
        this.storage.store('user_id', res.data._id); 
        this.storage.store('user_paltform_login', 0); 
        this.router.navigate(['/home']); 
      } 

    }); 
}); 

    } 

} 

有一件事我已經注意到是,如果我刪除裏面googleClick()一切,只保留this.router.navigate(['/home']);那麼這個工作正常。

+0

你能顯示你的路由器文件嗎? –

+0

你可以用router-outlet顯示html文件嗎? – learner

+0

@learner我在我更新的問題中包含了必要的文件 –

回答

1

在您googleClick()方法執行以下操作:

  • 進樣NgZone到組件
  • 裹行this.router.navigate(['/home']);到NgZone run方法

它會像:

this.ngZone.run(() => this.router.navigate(['/home']))

這是一個基於github上的issue的工作。

相關問題