Tôi mới vào AngularJS và có một dịch vụ mà nạp cấu hình sử dụng ban đầu của tôiAngularJS chạy chức năng dịch vụ trước khi các chức năng khác
angular.module('myApp').service('myService', ['$http', function ($http) {
var self = this;
self.user = {};
self.loadConfiguration = function() {
$http.get('/UserConfig').then(function (result) {
self.user = result.data;
});
};
self.loadConfiguration();
}]);
Tôi có một bộ điều khiển có sử dụng cấu hình từ dịch vụ này
angular.module('myApp').controller('myController', ['$scope', 'myService', function ($scope, myService) {
var self = this;
// calculation based on service value
self.something = myService.user.something * something else;
}]);
Vấn đề ở đây là myService.user.something có thể không được xác định vì yêu cầu AJAX có thể chưa hoàn thành khi mã này được gọi. Có cách nào để hoàn thành dịch vụ trước khi bất kỳ mã nào khác được chạy không? Tôi muốn chức năng dịch vụ 'loadConfiguration' được chạy chỉ một lần bất kể số lượng bộ điều khiển phụ thuộc vào nó.
Câu trả lời của bạn hầu hết đều hoạt động. Nó không hoạt động nếu dịch vụ đã được nạp trước khi bộ điều khiển được khởi tạo vì sau đó $ scope. $ On ('myService: getUserConfigSuccess') sẽ không bao giờ kích hoạt. –
@ user1 Ahhhh, vâng! Vì vậy, nếu bạn muốn chắc chắn, bạn có thể gọi 'loadConfiguration()' từ bộ điều khiển của bạn, hoặc thêm một kiểm tra nếu 'user' đã được nạp trong bộ điều khiển (nếu có, hãy sử dụng nó; nếu không, thêm một trình lắng nghe sự kiện). –
Vâng, đó là những gì tôi đã làm. :) Tôi muốn để lại một hồ sơ về sự thiếu sót của câu trả lời được chấp nhận để giúp đỡ bất cứ ai đọc vài tháng này kể từ bây giờ. –