Tôi đang xây dựng trang web thương mại điện tử (dựa trên shopify) và tôi đang sử dụng nhiều ứng dụng góc nhỏ để xử lý những thứ như giỏ hàng nhanh, danh sách yêu thích, sản phẩm lọc và vài mục nhỏ khác. Ban đầu tôi đã sử dụng một ứng dụng lớn (có định tuyến và mọi thứ), nhưng nó có chút hạn chế khi tôi không có một API REST đầy đủ.Chia sẻ một dịch vụ duy nhất giữa nhiều ứng dụng angular.js
Có một số dịch vụ mà tôi muốn chia sẻ giữa các ứng dụng góc (dịch vụ giỏ hàng, vì vậy tôi có thể có nút thêm nhanh sẽ phản ánh trong giỏ hàng nhỏ), nhưng tôi không chắc chắn về cách tốt nhất (nếu có một cách) để đi về điều này. Chỉ cần chia sẻ một mô-đun với dịch vụ không giữ trạng thái giống nhau trên các ứng dụng.
Tôi đã thử sức với nó, nhưng dường như tôi không cập nhật trạng thái giữa cả hai ứng dụng. Sau đây là javascript tôi đã thử sử dụng. Nó cũng trên jsfiddle đi kèm với 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']);
Bất kỳ trợ giúp sẽ được đánh giá
Đó là công trình độc đáo. Làm thế nào bạn sẽ đề nghị tôi làm điều $ window.rootScopes với nhiều dịch vụ chia sẻ? Tôi sẽ đoán nó sẽ tăng gấp đôi nếu tôi không cẩn thận –
Ah đừng lo lắng, tôi đã tìm ra một cách tốt để làm điều đó - đặt nó trong một khối chạy trong các ứng dụng, không phải là mô-đun chia sẻ –
@TomBrunoli bạn có thể xây dựng về những gì bạn đã làm? Làm cách nào bạn di chuyển mã dịch vụ từ các mô-đun được chia sẻ sang khối chạy của ứng dụng mà không có lỗi? – kevin11