2012-04-02 8 views
10

La forma habitual de definir un recurso aislado en AngularJS es:

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

Estoy tratando de averiguar la mejor manera de escribir un modelo que relaciona a otros modelos, como una Order que tiene 1 o más OrderItem s. Mi primera idea es la siguiente:

  1. Crear los modelos de recursos OrderService y OrderItemService independientes
  2. Escribir un controlador que consulta la OrderService y observa la matriz resultado
  3. Cuando los cambios de la matriz de resultados, consultar el OrderItemService para todos de los ID de elemento y decorar el objeto order soporte con información, ya que viene en

Eso parece un poco desordenado. ¿Hay una manera más elegante?

+0

se plantea "TypeError: angular.service no es una función" – zVictor

+0

IIRC, pregunté esto cuando angular fue pre-1.0. La API probablemente ha cambiado desde entonces. –

+0

No hay problema, he creado una cuestión actualización: http://stackoverflow.com/q/11038425/599991 – zVictor

Respuesta

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 
}); 

Algo así como resolver su problema? Luego lo usaría como

var order, items; 

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

El recurso de Angular $ no comprende las relaciones. Es algo que nos gustaría cambiar en la publicación 1.0.

No creo que deba poner los datos en el pedido directamente, ya que no es parte de él, y tendrá problemas para continuar el pedido, ya que ahora también tendrá los artículos objeto.

+0

Estamos haciendo una especie de CQRS, por lo que los datos del pedido es de sólo lectura de todos modos. ¡Gracias! –

+4

creo que la función de los elementos debe utilizar 'OrderItem' en lugar de' order'. – psyho

+1

Parece obsoleto. ¿Cómo podemos utilizarlo con las fábricas? – zVictor