-1

如何从角度路由器链接中的参数中获取值?

这是我的代码

组件.ts:

Hotels: struct_hotel;
id : struct_hotel['id'] 

constructor(
    private activatedRoute: ActivatedRoute,
    private _service: ResultService)
    {
      this.activatedRoute.queryParams.subscribe(params => {
          let id= params['id'];
          //console.log(id);  
      });
    }
getDetails(id): void {
    this._service.getHotel(this.id).then(Hotels => this.Hotels = Hotels);
}

ngOnInit():void {
    this.getDetails(this.id);
  }

服务 :

private apidetail = 'http://localhost/bobobox/public/api/v1/room/show';
getHotel(id: string ): Promise<struct_hotel>
    {
        const url = `${this.apidetail}/${id}`;
        return this.http.get(url)
            .toPromise()
            .then(response => response.json() as struct_hotel[])
            .catch(this.handleError);
    }

我像这样在html上调用它{{Hotels.hotel_name}},我得到了错误ERROR TypeError: Cannot read property 'hotel_name' of undefined

谁能帮我 ?

4

4 回答 4

1

您在这里遇到的问题是由于异步调用在ngOnInit运行之前可能尚未准备好。

阅读参数后,您需要将this.getDetails(this.id);订阅放入构造函数中

this.activatedRoute.queryParams.subscribe(params => {
      let id= params['id'];
      this.getDetails(this.id);
  });

此外,您尝试使用的对象类型与您从服务中获取的对象类型似乎也存在一些不一致。

看来您要经过id一个酒店,所以响应应该是

then(response => response.json() as struct_hotel)
于 2018-01-31T08:30:55.440 回答
0

由于您的请求是异步的,因此在绑定时使用安全导航运算符

{{Hotels?.hotel_name}}

如果 Hotels 是一个数组,那么您需要 ngFor 如下,

<tr *ngFor="let dataobj of Hotels">
     {{dataobj ?.hotel_name}}
</tr>
于 2018-01-31T08:29:59.803 回答
0

酒店最初是不确定的。您必须使用新类声明,因为您将其设置为 struct_hotel 类型。

Hotels: struct_hotel = new struct_hotel();

完成此操作后,您现在可以在绑定上使用该类下的属性和默认值。

于 2018-01-31T08:36:57.400 回答
0

那么尝试控制台记录酒店,它可能是未定义的。

但是,您的代码中有一个错误,您正在返回 struct_hotel 数组,并且您正在承诺 struct_hotel (不是数组)。应该是哪一个?

如果它是一个数组,你不能只以 Hotels.hotel_name 的形式访问它,它应该是 Hotels[i].hotel_name。

于 2018-01-31T08:31:50.573 回答