如何将ID从我的打字稿传递到解析器?

时间:2018-08-03 12:11:06

标签: angular rest resolver

我试图弄清楚Angular如何使用getById服务。 从头开始,我公开了Rest Api服务,该服务返回一个布尔值,并检查项目是否在我最喜欢的List中:它获取元素的id作为参数。 在前端,我为基本Crud操作使用baseApi服务,为每个请求使用解析器: 因此,我需要做的是如何将id从我的方法传递到解析器,以及如何定义链接结构(URL)。

这是我的代码,用于更好地理解:

  • 我在baseService中的实际getById:

getById(link, id:number){
  this.header=this.createHeader();
  return this.http.get(this.apiurl+link+id,this.header).map(this.extractData);

}
*我在解析器中实际不正确的转换方法:

resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Item> {

  return this.service.getById(item/isFavorite/1');

 }

  • 打字稿文件中的方法,该方法获取我需要将其ID发送到解析程序的项目:

checkItem(item : Item){

  this.checkfav=this.route.snapshot.data.isfav;

/**
 * checkfav is a bool that should m rest api defined in resolver return
 */


}

2 个答案:

答案 0 :(得分:0)

如果当前激活的URL中具有相同的ID,则可以直接从route.params['id'];获取它,而不是从其他功能获取它。

resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Item> {    
   const id = route.params['id'];
   return this.service.getById('item/isFavorite/' + id);    
}

答案 1 :(得分:0)

我不完全了解您想要实现什么?

如果您需要从当前路由中获取信息(例如ID),以便可以在解析器中提供该信息,以便它能够解析所需的数据,则@Ammit Chigadani的方法是(几乎)正确

resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Item> {    
   const id = route.params['id'];
   return this.service.getById('item/isFavorite/', id);    // <= Be aware of the two parameters URL and id
}

如果问题出在,您的getById函数未按预期工作,那可能是因为您在没有显式“ id”参数的情况下调用了该方法。 你叫它

return this.service.getById(item/isFavorite/1');

我很确定你想给它打电话

return this.service.getById(item/isFavorite/' , 1);

我希望'ifav'是您为解析器定义的名称? 参见Angular.io。在该示例中,您可以通过

this.route.snapshot.data.team

因为解析器是在“团队”上定义的。

热烈的问候