2016-12-05 42 views
1

我使用routerLink從組件與餐館到另一個組件列表中通過URL更新值發送到另一個組件角2

[RouterLink] = "['../ restaurant-menu', restaurant.id]" 

發送ID在其他組件時,我用的是id作爲如下

ngOnInit() { 
    this.restaurantId = this.router.snapshot.params ['id'] 
    this.getRestaurantMenu (this.restaurantId) 
} 

restaurantMenu: void [] 

getRestaurantMenu (id): void { 
this.RestaurantsService.getRestaurantMenu (id) 
    .subscribe (
     restaurantMenu => this.restaurantMenu = restaurantMenu, 
     err => { 
      console.log (err); 
    }); 
} 

,一切工作正常,我第一次點擊一間餐廳,並加載它的菜單,當我返回到餐館列表,然後單擊一個不同的餐廳,這個問題開始,應用程序加載的第一家餐廳我的菜單點擊,我必須刷新瀏覽器手動加載正確的菜單。

我懷疑可以在調用函數getRestaurantMenu()後更新id,因爲無論我離開多少次並進入不同的餐館,它總是會顯示第一家餐廳的菜單,但我也試過這樣做在HTML上:

<P> {{restaurantId}} </ p> 

顯示的ID號碼是正確的。我嘗試了不同的方法來傳遞該ID,但結果是一樣的,可能是什麼問題?由於

+0

你在哪裏定義'This',爲什麼不使用'this'?也不知道如何調用'GetRestaurantMenu()'而不是'this.GetRestaurantMenu(...)'調用'GetRestaurantMenu()'。 – rob

+0

也是你的'NgOnInit()'被角度調用?我認爲它必須被稱爲'ngOnInit()' – rob

+0

是的,我的錯在我複製代碼的時候,對不起,我已經糾正了它 –

回答

0

我終於解決這個問題,這個問題是在服務得到菜單中未在成分,這裏是解決方案:

angular 2 service is not updating params

如果任何人碰到這個問題,這可能會有幫助。

0

也許儘量不要使用snapshotActivatedRoute代替:

import { ActivatedRoute, Params } from "@angular/router"; 

... 

constructor(private route: ActivatedRoute) { } 

... 

ngOnInit() { 

    // (+)param['id'] to convert string to number 
    this.route.params 
    .switchMap((param: Params) => this.RestaurantsService.getRestaurantMenu(+param['id'])) 
    .subscribe(
     restaurantMenu => this.restaurantMenu = restaurantMenu, 
     err => console.log (err) 
    ); 
} 
+0

我已經試過了,但不起作用 –

0

我做了什麼,在這裏建議 https://github.com/angular/angular/issues/9811#issuecomment-264874532 的restaurantMenu組件保持不變,但在restaurantList組件添加此:

import { Router } from '@angular/router'; 
    ... 
    openMenu(restaurant) { 
    this.router.navigate(['../restaurant-menu', restaurant]) 
     .then(() => window.location.reload()) 
    } 

and on restaurantList HTML我添加了一個(click)="openMenu(restaurantId)"它自動重新加載新頁面並更新id,其al微妙的解決方案,但工程,我會用它,直到找到一個更好的。