Sto costruendo un sito di e-commerce (basato su shopify) e sto usando più piccole applicazioni angularjs per gestire cose come un carrello della spesa veloce, liste dei desideri, prodotti di filtraggio e un pochi altri oggetti più piccoli. Inizialmente ho usato una grande applicazione (che aveva routing e tutto), ma era un po 'restrittiva quando non avevo un'API REST completa.Condividi un singolo servizio tra più app angular.js
Ci sono un paio di servizi che vorrei condividere tra le app angolari (il servizio di carrello, quindi posso avere un pulsante di aggiunta rapida che si rifletterà nel mini-carrello e così via), ma io non sono sicuro del modo migliore (se c'è un modo) per andare su questo. La semplice condivisione di un modulo con il servizio non mantiene lo stesso stato in tutte le app.
Ci ho provato, ma non mi sembra di aggiornare lo stato tra le due app. Quello che segue è il javascript che ho provato ad usare. E 'anche sulla jsfiddle con html accompagnamento: http://jsfiddle.net/k9KM7/1/
angular.module('test-service', [])
.service('TestService', function($window){
var text = 'Initial state';
if (!!$window.sharedService){
return $window.sharedService;
}
$window.sharedService = {
change: function(newText){
text = newText;
},
get: function(){
return text;
}
}
return $window.sharedService;
});
angular.module('app1', ['test-service'])
.controller('App1Ctrl', function($scope, TestService){
$scope.text = function(){ return TestService.get() }
$scope.change = function(){ TestService.change('app 1 activated') }
});
angular.module('app2', ['test-service'])
.controller('App2Ctrl', function($scope, TestService){
$scope.text = function(){ return TestService.get() }
$scope.change = function(){ TestService.change('app 2 activated') }
});
var app1El = document.getElementById('app1');
var app2El = document.getElementById('app2');
angular.bootstrap(app1El, ['app1', 'test-service']);
angular.bootstrap(app2El, ['app2', 'test-service']);
Qualsiasi aiuto sarebbe apprezzato
che funziona bene. Come vorresti proporre che io faccia la cosa $ window.rootScopes con più servizi condivisi? Presumo che si raddoppierebbe se non fossi attento –
Ah non preoccuparti, ho trovato un buon modo per farlo - mettilo in un blocco di esecuzione nelle app, non i moduli condivisi –
@TomBrunoli puoi elaborare su cosa hai fatto? Come hai spostato il codice di servizio dai moduli condivisi al blocco di esecuzione delle app senza errori? – kevin11