我的申请要求候选人设立代理机构和国籍(以及其他事项)。我想在全局变量中设置代理和国籍列表,以便可以通过配置文件屏幕访问它们,而不是每次都从数据库中检索它们(就像它们当前一样)。感谢这里的其他问题,到目前为止......但是一个关键的拼图显然已经缺失了。数据正在从数据库中检索,但在其他地方不可见。
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);
}
警报根本不会发射。
来自candidatecontroller.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值是'undefined'。
我有两个理论 -
以某种方式,homecontroller $ rootScope没有被识别为我想要的全局(这只是变量的名称),还需要采取其他一些“回传”动作(我已尝试过几次) “return nationalitieslist.data”的变体,并将其分配给其他变量/句柄)。此外,nationalitieslist.data与硬编码列表的格式相同,只是更长。
我被javascript的异步性质所困扰,当我加载第二页时,数据还没有。我不相信这是正确的,因为数据库电话正在完成,我有一个警报,它显示了一个随机的国籍名称,它就在那里。
我的沮丧部分来自GetNationalityList和GetAllAgencies代码片段在候选控制器中正确分配值(现在已注释掉的位)这一事实,但在homecontroller中工作方式略有不同。
最重要的提示,有人,请?
答案 0 :(得分:2)
我相信这篇文章可以提供帮助。 http://toddmotto.com/all-about-angulars-emit-broadcast-on-publish-subscribing/ 我有一些类似的问题,但我需要从工厂排放。 我的问题在这里得到了回答。
答案 1 :(得分:0)
你的第二点更多是你的问题,虽然它不是本质上异步的JavaScript,它是Angular服务,例如你的GetAllAgencies
服务。您正在进行异步调用但不等待响应。这就是为什么当你手动分配它时一切正常。尝试将alert()
置于回调函数中getData()
。这应该强调该过程应该如何运作。