$ ресурсные отношения в AngularJS

Обычный способ определения изолированного ресурса в AngularJS:

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

Я пытаюсь найти лучший способ написать модель, относящуюся к другим моделям, например Order, которая имеет 1 или более OrderItem s. Моя первая идея такова:

  • Создайте OrderService и OrderItemService в качестве независимых моделей ресурсов
  • Напишите контроллер, который запрашивает OrderService и наблюдает за массивом результатов
  • Когда массив результатов изменяется, запросите OrderItemService для всех идентификаторов элементов и украсьте объект Order с расширенной информацией, как это происходит в

Это кажется немного грязным. Есть ли более элегантный способ?

Ответ 1

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 не понимает отношения. Это то, что мы хотели бы изменить в post 1.0.

Я не думаю, что вы должны поместить данные в заказ напрямую, так как он не является частью этого, и у вас будут проблемы с сохранением порядка, так как теперь он будет иметь объект item.