我正在使用AngularJS,我需要一個全局的幾個全局對象,可以被任何控制器在應用程序中訪問。AngularJS中的異步全局變量
例如,我需要的一個對象是具有用戶ID和其他屬性的用戶對象。這個用戶對象來自數據庫,通過ajax。所以我需要一種方法來設置該用戶對象,然後初始化頁面上使用的控制器。基本上給應用程序一個頁面加載程序的第一次加載。
然後,如果該對象沒有設置,我需要重定向。
有沒有人有如何幹淨地做到這一點的想法?我一直在試圖使用廣播,但它的修飾意大利麪代碼。
目前我使用ui路由器,並有一個隱藏的視圖與控制器GlobalsCtrl。 GlobalsCtrl使用服務來獲取對象,然後$廣播它們以便控制器可以初始化。但是......此廣播只適用於初始網站加載。當更改$ location.paths時,由於已設置GlobalsCtrl變量,所以未廣播該事件。
我可以添加一些if語句,但對我來說似乎很混亂。
請幫忙。謝謝!
Plunker - http://plnkr.co/edit/TIzdXOXPDV3d7pt5ah8i
var app = angular.module('editor.services', []);
app.factory('AnalysisDataService', ['$http', function($http) {
var self = this;
self.activeAnalysis = {};
self.openAnalysis = function(analysisId) {
return $http.get('api/v1/assignments/analysis/' + analysisId)
.success(function(data, status, headers, config) {
self.activeAnalysis = data;
return self.activeAnalysis;
}).error(function(data, status, headers, config) {
console.log("Error could not load analysis article.");
}).then(function(result) {
return self.activeAnalysis;
});
};
self.getAnalysis = function() {
return self.activeAnalysis;
};
self.navigateToStep = function(step) {
$location.path('/analysis/summary');
};
return {
open: self.openAnalysis,
get: self.getAnalysis,
navigate: self.navigateToStep,
}
}]);
問題是我需要一些其他的控制器的負載之前要設置的self.activeAnalysis變量。每個頁面根據analysisId加載一個不同的數據集。
顯示您目前擁有的一些代碼。聽起來你只是想要一個共享服務,你可以在整個板子上注入。 – tymeJV 2014-11-14 16:01:14
[angular service](https://docs.angularjs.org/guide/services)是爲所有控制器/指令獲取共享對象的正確概念。角度服務是單身漢。例如,您可以使用'$ http'服務處理所有AJAX請求,使用'$ cookies'服務來讀取/寫入瀏覽器cookie。您可以創建一個「用戶」服務來讀取所有控制器的訪問者信息。 – shawnzhu 2014-11-14 16:15:32
嗨,我用我的文件添加了一個Plunker:http://plnkr.co/edit/TIzdXOXPDV3d7pt5ah8i – RachelC 2014-11-14 16:16:02