Ich baue eine E-Commerce-Site (basierend auf shopify) und ich benutze mehrere kleine angularjs apps, um Dinge wie einen schnellen Warenkorb, Wunschlisten, Filterprodukte und a einige andere kleinere Gegenstände. Ich verwendete anfangs eine große Anwendung (die Routing und alles hatte), aber es war ein bisschen zu restriktiv, wenn ich nicht eine vollständige REST API hatte.Teilen Sie einen einzigen Dienst zwischen mehreren angular.js apps
Es gibt ein paar Dienste, die ich zwischen den eckigen Apps (der Warenkorb-Service, so dass ich eine schnelle Schaltfläche hinzufügen kann, die in den Mini-Warenkorb und dergleichen widerspiegeln) möchte, aber ich bin nicht sicher der beste Weg (wenn es einen Weg gibt), um darüber zu gehen. Durch das Teilen eines Moduls mit dem Dienst wird nicht der gleiche Status in den Apps beibehalten.
Ich habe versucht, meine Hand, aber ich es scheint nicht den Status zwischen beiden Apps zu aktualisieren. Das folgende ist das Javascript, das ich versuchte zu verwenden. Es ist auch auf jsfiddle mit begleitender html: 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']);
Jede mögliche Hilfe
geschieht, die gut funktioniert. Wie würden Sie vorschlagen, dass ich die $ window.rootScopes-Sache mit mehreren Shared Services mache? Ich würde vermuten, es würde verdoppeln, wenn ich nicht vorsichtig war –
Ah, keine Sorge, ich fand einen guten Weg, es zu tun - legte es in einen Lauf Block in den Apps, nicht die freigegebenen Module –
@ TomBrunoli können Sie erarbeiten Was hast du gemacht? Wie haben Sie den Service-Code fehlerfrei aus den freigegebenen Modulen in den Run-Block der Apps verschoben? – kevin11