一尘不染

AngularJS中的$资源关系

angularjs

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

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

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

  1. 创建OrderServiceOrderItemService作为独立资源模型
  2. 编写一个查询OrderService并观察结果数组的控制器
  3. 当结果数组更改时,请查询的OrderItemService所有商品ID,并order使用扩展信息来装饰对象。

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


阅读 212

收藏
2020-07-04

共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无法理解关系。这是我们希望在1.0版之后进行更改的内容。

我不认为您不应该将数据直接放在订单上,因为它不是订单的一部分,而且由于现在也包含items对象,因此在持久化订单时会遇到问题。

2020-07-04