Buduję witrynę e-commerce (w oparciu o shopify) i używam wielu małych aplikacji angularjs do obsługi takich rzeczy jak szybki koszyk na zakupy, listy życzeń, filtrowanie produktów i kilka innych mniejszych przedmiotów. Początkowo używałem jednej dużej aplikacji (która miała routing i wszystko), ale było trochę restrykcyjne, gdy nie miałem pełnego API REST.Udostępnianie pojedynczej usługi między wieloma aplikacjami angular.js
Jest kilka usług, które chciałbym udostępnić między aplikacjami kątowymi (usługa koszyka, dzięki czemu mogę mieć przycisk szybkiego dodawania, który będzie odzwierciedlał w mini-wózku itp.), Ale nie jestem na pewno najlepszy sposób (jeśli istnieje sposób), aby to osiągnąć. Po prostu udostępnienie modułu z usługą nie zachowuje tego samego stanu w aplikacjach.
Próbowałem na to ręką, ale nie wydaje mi się, aby zaktualizować stan między obu aplikacji. Poniżej znajduje się javascript, którego próbowałem użyć. Jest to także na jsfiddle z html towarzyszących: 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']);
Każda pomoc będzie mile widziane
który działa ładnie. W jaki sposób zaproponowałbym, aby zrobić coś $ window.rootScopes z wieloma usługami współdzielonymi? Zakładam, że podwoiłoby się, gdybym nie był ostrożny. –
Ach, nie martw się, wymyśliłem dobry sposób na zrobienie tego - umieść go w bloku uruchamiania w aplikacjach, a nie w udostępnionych modułach. –
@ TomBrunoli możesz rozwinąć o tym, co zrobiłeś? W jaki sposób przeniesiono kod usługi z udostępnionych modułów do bloku uruchamiania aplikacji bez błędów? – kevin11