2012-04-02 19 views
10

Il solito modo di definire una risorsa isolato in AngularJS è:

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

Sto cercando di capire il modo migliore per scrivere un modello che si riferisce ad altri modelli, come ad esempio un Order con 1 o più OrderItem s. La mia prima idea è questa:

  1. Creare modelli di risorse OrderService e OrderItemService indipendenti
  2. Scrivi un controller che interroga il OrderService e guarda la matrice risultato
  3. Quando il risultato cambia matrice, interrogare il OrderItemService per tutti degli ID articolo e decorare l'oggetto order con informazioni estese come è in

Sembra un po 'disordinato. C'è un modo più elegante?

+0

solleva "TypeError: angular.service non è una funzione" – zVictor

+0

IIRC, l'ho chiesto quando Angular era pre-1.0. L'API è probabilmente cambiata da allora. –

+0

Nessun problema, ho creato una domanda aggiornata: http://stackoverflow.com/q/11038425/599991 – zVictor

risposta

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

Qualcosa come sopra risolverebbe il tuo problema? Lo useresti come

var order, items; 

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

La risorsa $ di Angular non comprende le relazioni. È qualcosa che vorremmo cambiare nel post 1.0.

Non penso che dovresti mettere direttamente i dati sull'ordine, poiché non fa parte di esso, e avrai problemi a persistere nell'ordine dato che ora avrà anche gli oggetti oggetto.

+0

Stiamo facendo una specie di CQRS, quindi i dati dell'ordine sono di sola lettura comunque. Grazie! –

+4

Penso che la funzione items dovrebbe usare 'OrderItem' invece di' order'. – psyho

+1

Sembra obsoleto. Come possiamo usarlo con le fabbriche? – zVictor

Problemi correlati