我试图弄清楚Angular如何使用getById服务。 从头开始,我公开了Rest Api服务,该服务返回一个布尔值,并检查项目是否在我最喜欢的List中:它获取元素的id作为参数。 在前端,我为基本Crud操作使用baseApi服务,为每个请求使用解析器: 因此,我需要做的是如何将id从我的方法传递到解析器,以及如何定义链接结构(URL)。
这是我的代码,用于更好地理解:
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');
}
checkItem(item : Item){
this.checkfav=this.route.snapshot.data.isfav;
/**
* checkfav is a bool that should m rest api defined in resolver return
*/
}
答案 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
因为解析器是在“团队”上定义的。
热烈的问候