2

Warum sollte $resource von .factory verwendet werden? und warum .service ist ein falscher Weg?

z.B.

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

warum ist es falsch?

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

Die zweite feine funktionieren würde, aber nur, weil JavaScript, um diese seltsame Eigenschaft ermöglicht eine Konstruktorfunktion ein Objekt zurückgeben muss, statt nur die Initialisierung 'this'and es zurück. Da man nicht wirklich ein Objekt konstruieren will, sondern eines zurückgeben will, macht eine Fabrik mehr Sinn. –

Antwort

1

Beide sind Singletons, aber services werden mit dem new Schlüsselwort instanziiert. Sie können nicht auf die statischen Klassenmethoden von $resource zugreifen, wenn Sie service verwenden möchten, die je nach Anwendung möglicherweise besser sind.

Mit anderen Worten: Sie werden nicht in der Lage sein zu verwenden:

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

und andere Klasse-Varianten. Nur Instanzmethoden wie:

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

Das stimmt nicht genau. Es ist vielleicht nicht das Beste, aber es ist möglich, statische Methoden mit 'Notes.prototype.constructor.query' zu erhalten. – estus

+0

OP fragte, warum es eine schlechte Übung sei - Ihr Workaround ist ein gutes Beispiel dafür. –