2

pourquoi un $resource doit être utilisé par .factory? et pourquoi .service est un mauvais moyen?

par exemple.

app.factory('Notes', ['$resource', function($resource) { 
return $resource('/notes/:id', null, 
    { 
     'update': { method:'PUT' } 
    }); 
}]); 

pourquoi est-ce mauvais?

app.service('Notes', ['$resource', function($resource) { 
return $resource('/notes/:id', null, 
    { 
     'update': { method:'PUT' } 
    }); 
}]); 
+1

Le second fonctionnerait très bien, mais seulement parce que JavaScript a cette caractéristique bizarre de permettre à une fonction constructeur pour retourner un objet, au lieu d'initialisation 'this'and retourner. Puisque vous ne voulez pas vraiment construire un objet, mais que vous voulez en retourner un, une usine a plus de sens. –

Répondre

1

sont deux singletons, mais services sont instanciés en utilisant le mot-clé new. Vous ne serez pas en mesure d'accéder aux méthodes de classe statique de $resource si vous allez utiliser service, ce qui, selon votre application peut être mieux.

En d'autres termes, vous ne pourrez pas utiliser:

Notes.query({ ... }); 
Notes.create({ ... }); 

et d'autres variantes de fonction de classe. les méthodes d'instance seulement comme:

note.$get() 
note.$save() 
note.$update() 
+0

Ce n'est pas tout à fait vrai. Ce n'est peut-être pas la meilleure chose à faire, mais il est possible d'obtenir des méthodes statiques avec 'Notes.prototype.constructor.query'. – estus

+0

OP a demandé pourquoi c'était une mauvaise pratique - votre solution de contournement est un bon exemple pourquoi. –