【发布时间】:2014-06-25 14:06:11
【问题描述】:
我的申请要求候选人具有代理机构和国籍(除其他外)。我想在全局变量中设置机构和国籍列表,以便他们可以通过配置文件屏幕访问,而不是每次都从数据库中检索(就像目前一样)。多亏了这里的其他问题,我到目前为止……但显然缺少一个关键的拼图。正在从数据库中检索数据,但随后在其他地方看不到。
加载数据的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);
}
警报根本不会触发。
来自候选人controller.js:
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 值是“未定义”。
我有两个理论 -
不知何故,homecontroller $rootScope 没有被识别为我想要的全局(这只是变量的名称),需要采取其他一些“回传”操作(我已经尝试了几个“return nationalitieslist.data”的变体并将其分配给其他变量/句柄)。此外,nationalitieslist.data 与硬编码列表的格式相同,只是它更长。
我被 javascript 的异步特性所吸引,当我加载第二页时,数据还没有出现。我不相信这是正确的,因为数据库调用正在完成,并且我收到了一个警报,显示了一个随机的国籍名称并且它就在那里。
我感到沮丧的部分原因是 GetNationalityList 和 GetAllAgencies 代码 sn-ps 工作并在候选控制器中正确分配值(现在已注释掉的位),但在主控制器中的工作方式略有不同。
请给我一些重要的提示?
【问题讨论】: