发送到另一个组件时更新值 Angular 2

Update values when sending to another component Angular 2

我正在使用 routerLink 通过 URL

将带有餐厅列表的组件的 id 发送到另一个组件
[RouterLink] = "['../ restaurant-menu', restaurant.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);
    });
}

我第一次点击餐厅并加载菜单时一切正常,当我 return 进入餐厅列表并点击另一家餐厅时,应用程序加载了第一家餐厅的菜单时,问题就开始了我点击了,我必须手动刷新浏览器才能加载正确的菜单。

我怀疑在调用函数getRestaurantMenu()后是否可以更新id,因为无论我离开并进入不同的餐厅多少次,它总是显示第一家餐厅的菜单,但我也尝试这样做这个在 HTML:

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

并且显示的身份证号码是正确的。我尝试了不同的方法来传递该 id 但结果是一样的,可能是什么问题?谢谢

也许尽量不要使用 snapshot 而是 ActivatedRoute :

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)
    );
}

我按照这里的建议做了 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())
  }

并且在 restaurantList HTML 我添加了一个 (click)="openMenu(restaurantId)" 它会自动重新加载新页面并更新 id,这是一个有点棘手的解决方案但是有效,我会使用它直到找到一个更好的一个。

我终于解决了这个问题,问题出在服务获取菜单而不是组件中,这是解决方案:

如果其他人运行遇到这个问题,这可能会有所帮助。