Nehmen wir an, ich eine Fabrik, eine Dienstleistung oder Provider-Objekt wie soWie ein Dienstobjekt zu machen, die nicht ihre Werte mit den Controllern nicht teilt, die es konsumieren
myApp.factory('myService', function() {
return {
counter: 0,
increment: function() {
console.log('counter: ' + (this.counter++))
}
};
});
Und wenn ich einen Controller haben, hängt auf sie
myApp.controller('myCtrl', function(myService) {
$scope.incr = function() {
myService.increment();
};
}
Und ich wenden sie diesen Regler in verschiedenen Teilen des html
<div ng-controller="myCtrl">
<button ng-click="increment()">increment</button>
</div>
...
<div ng-controller="myCtrl">
<button ng-click="increment()">increment</button>
</div>
Gerade jetzt, wenn ich auf jede Taste klicke, ist der Zähler universal und es geht 0, 1, 2, 3, ...
Wie kann ich meine Fabrik, Service oder Provider schreiben, so dass jeder Controller einen bekommt verschiedene Kopie des Serviceobjekts?
Alle Dienste in Winkel Singletons sind. Was Sie wollen, ist ein Factory-Service, mit dem Sie Ihren Service erstellen können. Z.B. 'MyServiceFactory', injiziere dies in den Controller und lass es eine Methode haben, einen' myService' zu erstellen. – Yoshi
Hallo @ Yoshi. Ja, ich habe gelesen, dass alle Dienste Singletons sind, weshalb ich Probleme habe, separate Instanzen zu erstellen. Können Sie näher erläutern, was Sie meinen, indem Sie einen Werksservice erstellen und in den Controller einspeisen? Ist das nicht, was ich in meinem Beispiel getan habe? – kane
Nicht wirklich. Sie haben einen konkreten Dienst (instanziiert durch Winkel) verwendet, der dann durch Injektion geteilt wird. Sie benötigen einen anderen Dienst (die oben genannte Fabrik oder Ähnliches), mit dem Sie Ihre eigene Erstellungsmethode für einen 'myService' bereitstellen würden, der innerhalb des Controllers verwendet werden soll. Z.B. 'var myService = MyServiceFactory.createService();' – Yoshi