Erstelle eine injizierbare Klasse (Konstruktor)
Ich bin eine AngularJS-Neuling, und ich bin gerade erst anfangen zu verstehen, die Konzepte und Unterschiede von factory
service
und controller
. So wie ich das verstehe, eine factory
zurück, "value object", die injiziert werden können. Die meisten Beispiele, die ich gesehen habe etwas wie das hier tun:
angular.module('module.factories', function() {
factory('FactoryObject', function() {
return {
someFunction: function(someParam) {};
someOtherFunction: function(someOtherParam) {});
};
});
});
In meinem controller
ich möchte in der Lage sein, um dieses Objekt verwenden, aber ich möchte initialisieren/instanziieren Sie es in der Steuerung, da kann es neu initialisiert werden je nach Veranstaltungen/Aktionen in der Steuerung. Also, ich wurde gefragt, ob ich zurückkehren könnte, eine Konstruktor-Funktion in der factory statt?
angular.module('module.factories', function() {
factory('FactoryObject', function() {
function FactoryObject(initParam) {
}
FactoryObject.prototype.someFunction = function() {};
return FactoryObject;
});
});
Ist das ein passendes Muster für eine eckige Fabrik? Oder ist es nur "übertrieben" zu verwenden, eine Fabrik für ein benutzerdefiniertes Objekt, wie diesem? Sollte ich gerade in einer Bibliothek js-Datei, und verweisen Sie von dort statt? Ein Vorteil, dass es in einer Fabrik ist, dass es leicht sein wird, zu verhöhnen, als es in einem test, da wird es injiziert, wo es verwendet wird. Gibt es andere Mechanismen in Eckig, könnte stattdessen verwendet werden?
InformationsquelleAutor der Frage NilsH | 2013-04-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du hast ganz Recht, das ist die Art und Weise zu erstellen injizierbare "Klassen" (Konstruktoren). Jedoch, mit
factory
ist nur notwendig, wenn Sie injizieren müssen andere Sachen verwendet werden, die durch Ihre Klasse:Wenn Sie eine völlig unabhängige Klasse (z.B. Datenstrukturen), können Sie einfach
constant
so dass Ihre Klasse steht auch in der service-Anbieter:Wie nebenbei, mit
provider
ist nicht zu helfen, Sie in diesem. Anbieter dienen einem völlig anderen Zweck und (unter anderem) return eine factory-Funktion, die dann _once_ auf den ersten angeforderte Injektion auf erstellen Sie eine einzelne Instanz des service. Provider verwendet werden, um lassen Sie Sie so konfigurieren, dass einzelne service-Instanz in der _config phase_ der Anwendung Bau (siehe Dokumentation).InformationsquelleAutor der Antwort hon2a
Ich bin mit dem gleichen problem. Hier ist, was ich umgesetzt habe:
Nun, was ich tun kann:
Macht die Dinge mehr modularisiert. Hoffe, das hilft.
InformationsquelleAutor der Antwort Foo L
Ich hatte die gleiche Frage. Ich fand einen tollen Artikel darüber, wie, um das setup-Objekt-orientierte AngularJS-Services. Hier ist der Artikel. Achten Sie auf den Hinweis über die Verwendung von Fabriken und nicht für Leistungen. Es umfasst auch die Erweiterung Ihrer Objekte. Ich fand es super einfach zu setup und es passt perfekt mit den Eckigen, während das Javascript einfach und geradlinig.
Für die Fabrik-services sind singletons und müssen nicht instanziiert werden, ich benutze die Objekt-literal Ansatz hat einige performance-Vorteile.
InformationsquelleAutor der Antwort Darryl
Hier, wie ich das Problem gelöst:
Die einzige Sache, die zurückgegeben werden aus der service ist der Konstruktor und dann gibt der Dienst den rest des service.
InformationsquelleAutor der Antwort jolySoft