Załóżmy utworzyć fabryki, usługi lub obiekt dostawcy jak takJak utworzyć obiekt usługi, które nie dzielić swoje wartości ze sterownikami, które je spożywają
myApp.factory('myService', function() {
return {
counter: 0,
increment: function() {
console.log('counter: ' + (this.counter++))
}
};
});
I przypuśćmy Mam kontroler, który zależy na nim
myApp.controller('myCtrl', function(myService) {
$scope.incr = function() {
myService.increment();
};
}
I zastosowanie tego kontrolera w różnych częściach html
<div ng-controller="myCtrl">
<button ng-click="increment()">increment</button>
</div>
...
<div ng-controller="myCtrl">
<button ng-click="increment()">increment</button>
</div>
Teraz, gdy klikam na każdym przycisku, licznik jest uniwersalny i wynosi 0, 1, 2, 3, ...
Jak mogę napisać moją fabrykę, usługę lub dostawcę, aby każdy kontroler otrzymał inna kopia obiektu usługi?
Wszystkie usługi kątowe są samotnymi. To, czego chcesz, to usługa fabryczna, której możesz użyć do stworzenia swojej usługi. Na przykład. 'MyServiceFactory', wprowadź to do kontrolera i pozwól mu utworzyć metodę' myService'. – Yoshi
Hi @Yoshi. Tak, przeczytałem, że wszystkie usługi są singletonami, dlatego mam problemy z tworzeniem oddzielnych instancji. Czy możesz wyjaśnić, co masz na myśli, tworząc serwis fabryczny i wprowadzając go do kontrolera? Czy to nie jest to, co zrobiłem w moim przykładzie? – kane
Niezupełnie. Użyłeś konkretnej usługi (utworzonej przez kąt), która następnie jest udostępniana przez wstrzyknięcie. Potrzebujesz innej usługi (wspomnianej wyżej lub podobnej), dzięki której możesz podać własną metodę tworzenia "myService", która będzie używana wewnątrz kontrolera. Na przykład. 'var myService = MyServiceFactory.createService();' – Yoshi