ngResource解析嵌套资源

lys*_*ing 7 angularjs angularjs-resource

有什么选项可以解析ngResource响应中的嵌套资源?

关于在ngResource中解析嵌套资源的端点有一些相关的问题,但是这个问题是关于REST响应何时包含嵌套在正在查询的集合中的第二个资源,特别是你不会有的1对1映射例如pets/<id>/owner作为自己的资源.

假设有两种资源,Pets并且Owners:

GET /宠物:

[{
  name: 'spark',
  type: 'dog',
  owner: '/owners/3/' # alternatively just '3' or the full object.
}]
Run Code Online (Sandbox Code Playgroud)

作为开发人员,我有时想要查询整个Owner资源,有时我想查询Pet资源然后我自动想要将owner属性解析为资源实例.

这是我目前的解决方案:

.factory('Pet', function ($resource, Owner) {
  var Pet = $resource('/pets/:id', {id: '@id'});

  Pet.prototype.getOwner = function () {
    return new Owner(this.owner); // or Owner.get({id: this.owner})
  }

  return Pet;
})
Run Code Online (Sandbox Code Playgroud)

这里的问题很多.有诚信 - 一个人.我相信,这种实现允许同一资源的多个实例.那就是实用性.你也有额外的属性来跟踪(ownergetOwner(),而不是只owner;可能setOwner,如果你希望能够保存模型).

可以构建一个替代解决方案transformResponse,但是在每个具有嵌套映射的资源中都包含该解决方案.

ten*_*ent 3

我相信这就是 Martin Gontovnikas 创建 Restangular 的确切原因。他不喜欢在主角度框架中处理嵌套的 $resources。我认为他的 Restangular 解决方案非常适合您的需求。他的代码位于 GitHub 上,并且在 youtube有一个精彩的介绍视频。

一探究竟。我想你会发现它完全按照你想要的方式做。

  • 所以你可以在 Restangular 中做的是,调用 `Restangular.one('pets', 1).one('owner').get()` 并加载 `/pets/1/owner`。我正在寻找一个这是一种范式,其中每个资源都有一个唯一的端点,因此每个所有者只能从“/owners/”访问,但同时可以将对象嵌入到不同资源的响应中。 (3认同)