【问题标题】:How to pass an Id from my Typescript to the resolver?如何将我的 Typescript 中的 Id 传递给解析器?
【发布时间】:2018-08-03 20:48:06
【问题描述】:

我试图弄清楚 Angular 如何使用 getById 服务。 我从一开始就公开了一个 Rest Api 服务,它返回一个布尔值并检查一个项目是否在我最喜欢的 List 中:它获取一个元素的 id 作为参数。 在我的前端,我使用 baseApi 服务进行基本 Crud 操作,并为每个请求使用解析器: 所以我需要做的是如何将我的方法中的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
 */


}

【问题讨论】:

  • “解析器”,如您所说,是静态数据。如果您想在路线之间共享数据,则必须使用共享服务。
  • “解析器”也是一种在将数据加载到组件之前收集数据的服务,它们被调用,所以我没有发明它们。在使用解析器之前,我使用服务来处理数据,但后来我不得不处理同步问题,这就是我使用解析器的原因。
  • 我的错,我误读了您的代码和文档!
  • 过世了 :))
  • 但是你应该考虑使用订阅来获取你的数据,快照是静态的(快照的定义)

标签: angular rest resolver


【解决方案1】:

你可以直接从route.params['id'];获取它,而不是从其他函数获取它,如果你在当前激活的url中有相同的id。

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

【讨论】:

  • 感谢您的回复,但我已经尝试这样做但它不起作用,它返回未定义的 url 中的 id..
  • 为什么会是未定义的?那你如何获取id?你的网址怎么样?
  • 可能是因为没有获取到id,我的url应该是这样的格式:localhost:8080/item/isFavorite/item.id
  • 你能显示你的路由配置吗?我的意思是路由模块。
  • 这里是路径:{path: 'Employee_Dashboard', component: UserComponent, canActivate: [UrlPermission], resolve: { workingHours: Working_hoursResolver, isfav:IsFavResolver}},
【解决方案2】:

我不完全明白你想要达到什么目的?

如果您需要从当前路由中获取信息(例如 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

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

热烈的问候

【讨论】:

  • 通过单击按钮,我需要检查我的项目是否属于我的收藏夹。因此,我公开了一个 Rest Api 服务,如果该项目在我的收藏夹中,则返回 true 并且如果不是,则为假。所以,换句话说,我得到了我想在这个函数 checkFav 中测试的项目,并开发了一个 getById 函数,它接受一个链接(url)和参数(我想从后端检查的项目 ID)。问题是如何发送 id 并将其作为参数进行操作?我已经尝试使用静态 url,它返回了异常结果:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
相关资源
最近更新 更多