10

在 AngularJS 中定义隔离资源的常用方法是:

angular.service('TheService', function($resource){
  return $resource('api/url');
});

我试图找出编写与其他模型相关的模型的最佳方法,例如Order具有 1 或多个OrderItems 的模型。我的第一个想法是这样的:

  1. 创建OrderServiceOrderItemService作为独立的资源模型
  2. 编写一个控制器来查询OrderService并观察结果数组
  3. 当结果数组发生变化时,查询所有项目 ID 并在对象进入时使用扩展信息OrderItemService装饰对象order

这似乎有点乱。有没有更优雅的方式?

4

1 回答 1

18
angular.service('OrderItem', function($resource) {
  return $resource('api/url/orderItem');
});

angular.service('Order', function($resource, OrderItem) {
  var Order = $resource('api/url/order');

  Order.prototype.items = function(callback) {
    return order.query({orderId: this.id}, callback);
  }
  return Order
});

像上面这样的东西能解决你的问题吗?然后你会用它作为

var order, items;

Order.get({id: 123}, function(o) {
  order = o;
  o.items(function(is) { items = is; });
});

Angular 的 $resource 不理解关系。这是我们希望在 1.0 后更改的内容。

I don't think you should put the data on the order directly, since it is not part of it, and you will have issues persisting the order since it will now have the items object as well.

于 2012-04-03T18:12:04.543 回答