2013-06-21 8 views
45

seguito alcuni esempi, è evidente che siamo in grado di iniettare una fabbrica che conterrebbe un endpoint per un servizio riposo in questo modoAngularJS: creazione di più factory per ogni endpoint?

services.factory('Recipe', ['$resource', 
    function($resource) { 
     return $resource('/recipes/:id', {id: '@id'}); 
}]); 

Questo sembra grande, ma immaginate ho altri endpoint cioè/utenti /: id, e/groups /: id, come potete immaginare aumenterà il numero di endpoint diversi.

Quindi è buona norma avere una fabbrica diversa per ciascun endpoint in modo da avere ..

services.factory('Recipe', ['$resource',............ 

services.factory('Users', ['$resource',............. 

services.factory('Groups', ['$resource',............... 

O c'è un altro modo consigliato?

Non vedo davvero alcun problema, ma mi costringerà a creare molte fabbriche solo per gestire i diversi endpoint.

Qualsiasi aiuto o consiglio davvero apprecaited

Grazie

+0

possibile duplicato di [Angularjs: un servizio che serve più URL risorse/origini dati $?] (Http://stackoverflow.com/questions/17160771/angularjs-a-service-that-serves-multiple-resource-urls-data -sorgenti) – mpromonet

risposta

100

E 'una questione di preferenza.

Ma nulla vi impedisce di consolidare tutte le risorse all'interno di una fabbrica come in:

services.factory('Api', ['$resource', 
function($resource) { 
    return { 
    Recipe: $resource('/recipes/:id', {id: '@id'}), 
    Users: $resource('/users/:id', {id: '@id'}), 
    Group: $resource('/groups/:id', {id: '@id'}) 
    }; 
}]); 

function myCtrl($scope, Api){ 
    $scope.recipe = Api.Recipe.get({id: 1}); 
    $scope.users = Api.Users.query(); 
    ... 
} 
+2

Ah! questo ha senso, questo metodo sarebbe preferito all'altro? Non vorrei infrangere l'unico principio di responsabilità, ma penso che si tratti della stessa responsabilità? – Martin

+0

Sì, preferirei questo metodo, perché sì, tutte le risorse $ hanno la stessa responsabilità (meno l'endpoint effettivo a cui puntano). Se stavi usando $ http per creare un [più modelli personalizzati] (http://stackoverflow.com/a/11850027/1095616), le fabbriche separate sarebbero un'opzione migliore. – Stewie

+0

In questo modo si ottiene solo l'istanza API poiché le fabbriche sono singleton. Lo sto scavando proprio ora, ma la mia API non è ancora enorme. –

1

Se si dispone di tutte le risorse in una sola fabbrica, come si fa a creare un'istanza della classe?

Normalmente, con una singola risorsa, si dovrebbe: $scope.api = new Api();

che non sembra funzionare ... si blocca ... Inoltre, quello che voglio veramente è: $scope.users = new Api.Users(); ...

+0

Perché questo è stato messo in svantaggio? È un commento al meglio (probabilmente meglio come una domanda separata), ma non una risposta – Mawg

Problemi correlati