Supponiamo creo una fabbrica, di servizio, o di un oggetto fornitore in questo modoCome rendere un oggetto servizio che non condivide i suoi valori con i controller che consumano
myApp.factory('myService', function() {
return {
counter: 0,
increment: function() {
console.log('counter: ' + (this.counter++))
}
};
});
E supponiamo di avere un controller che dipende su di esso
myApp.controller('myCtrl', function(myService) {
$scope.incr = function() {
myService.increment();
};
}
E applico questo controllore in diverse parti del html
<div ng-controller="myCtrl">
<button ng-click="increment()">increment</button>
</div>
...
<div ng-controller="myCtrl">
<button ng-click="increment()">increment</button>
</div>
Al momento, quando clicco su ciascun pulsante, il contatore è universale e passa a 0, 1, 2, 3, ...
Come posso scrivere la mia fabbrica, servizio o fornitore in modo che ogni controller ottenga un copia diversa dell'oggetto di servizio?
Tutti i servizi in angolare sono single. Quello che vuoi è un servizio di fabbrica, che puoi utilizzare per creare il tuo servizio. Per esempio. 'MyServiceFactory', inseriscilo nel controller e lascia che abbia un metodo per creare un' myService'. – Yoshi
Ciao @Yoshi. Sì, ho letto che tutti i servizi sono singletons ed è per questo che ho difficoltà a creare istanze separate. Puoi approfondire cosa intendi creando un servizio di fabbrica e inserendolo nel controller? Non è quello che ho fatto nel mio esempio? – kane
Non proprio. Hai usato un servizio concreto (istanziato da angolare), che poi viene condiviso tramite iniezione. È necessario un altro servizio (il suddetto factory o simile), con il quale si fornisce il proprio metodo di creazione per un 'myService' da utilizzare all'interno del controller. Per esempio. 'var myService = MyServiceFactory.createService();' – Yoshi