[英]setting $rootScope but value then not visible from another controller
我的申請要求候選人必須具有代理機構和國籍(除其他外)。 我想在全局變量中設置機構和國籍的列表,以便可以通過概要文件屏幕訪問它們,而不是每次(如當前那樣)從數據庫中檢索它們。 多虧了這里的其他問題,我到現在為止……但是顯然缺少一個至關重要的難題。 正在從數據庫中檢索數據,但在其他地方看不到該數據。
homecontroller.js加載數據...
//Home page Controller
function HomeCtrl($scope, $rootScope, SessionTimeoutService, GetAllAgencies, GetNationalityList){
GetAllAgencies.getData({}, function(agencieslist, $rootScope) {
SessionTimeoutService.checkIfValidLogin(agencieslist);
$rootScope.agencieslistglobal = agencieslist.data;
});
/* I tried hard-coding values here - that worked & was passed thro' ok
$rootScope.nationalitieslistglobal = [
{'nationality_id' : 0, 'name' : 'Unknown'},
{'nationality_id' : 1, 'name' : 'Known'},
{'nationality_id' : 2, 'name' : 'Pants'},
]; */
GetNationalityList.getData({}, function(nationalitieslist, $rootScope) {
SessionTimeoutService.checkIfValidLogin(nationalitieslist);
$rootScope.nationalitieslistglobal = nationalitieslist.data;
});
alert($rootScope.nationalitieslistglobal[8].name);
}
警報根本不會觸發。
從候選人控件:
function CandidatesAddCtrl($scope, CandidateModel, GetNationalityList, SessionTimeoutService, $http, GetAllAgencies, $rootScope) {
/* commented out as this should now be done globally - this works when it's in place
GetAllAgencies.getData({}, function(agencieslist) {
SessionTimeoutService.checkIfValidLogin(agencieslist);
$scope.agencieslist = agencieslist.data;
});
*/
CandidateModel.getBlankCandidate();
$scope.candidateinfo = CandidateModel;
// get global agencies list
$scope.agencieslist = $rootScope.agencieslistglobal;
alert($scope.agencieslist); // shows 'undefined'
/*
GetNationalityList.getData({}, function(nationalitieslist) {
SessionTimeoutService.checkIfValidLogin(nationalitieslist);
$scope.nationalitieslist = nationalitieslist.data;
});
*/
// get global nationalities list
$scope.nationalitieslist = $rootScope.nationalitieslistglobal;
....
}
因此,...當我在GetNationalityList.getData函數(在上面的示例中已注釋掉的位)之外對數據進行硬編碼時,將填充並通過OK傳遞數據,然后填充我的下拉列表。 當我不這樣做時,$ rootScope值是'undefined'。
我有2個理論-
某種程度上,家庭控制器$ rootScope並沒有被認為是我想要的全局變量(這只是變量的名稱),還需要采取其他一些“回傳”操作(我已經嘗試過“返回國籍列表”的幾種變體)。數據”,並將其分配給其他變量/句柄)。 另外,nationalitieslist.data與硬編碼列表的格式相同,只是更長。
我被javascript的異步特性所吸引,當我加載第二頁時,數據還不存在。 我不確信這是正確的,因為數據庫呼叫正在結束,並且我有一個警報向我顯示了一個隨機的國籍名稱,並且該名稱在那里。
我之所以感到沮喪,部分原因在於GetNationalityList和GetAllAgencies代碼段在候選控制器(現在已注釋掉的位)中正常工作並正確分配了值,但在家庭控制器中卻以不同的方式工作。
重要提示,有人嗎?
我相信這篇文章會有所幫助。 http://toddmotto.com/all-about-angulars-emit-broadcast-on-publish-subscribing/我有一個類似的問題,但我需要從工廠排放。 我的問題在這里得到了回答。
第二點更多的是您的問題,盡管本質上不是異步的JavaScript,而是Angular服務,例如GetAllAgencies
服務。 您正在進行異步調用,但不等待響應。 這就是為什么當您手動分配它時都能正常工作的原因。 嘗試將您的alert()
放在對getData()
調用的回調函數中。 這應該突出該過程應如何工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.