繁体   English   中英

设置$ rootScope但值从另一个控制器不可见

[英]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个理论-

  1. 某种程度上,家庭控制器$ rootScope并没有被认为是我想要的全局变量(这只是变量的名称),还需要采取其他一些“回传”操作(我已经尝试过“返回国籍列表”的几种变体)。数据”,并将其分配给其他变量/句柄)。 另外,nationalitieslist.data与硬编码列表的格式相同,只是更长。

  2. 我被javascript的异步特性所吸引,当我加载第二页时,数据还不存在。 我不确信这是正确的,因为数据库呼叫正在结束,并且我有一个警报向我显示了一个随机的国籍名称,并且该名称在那里。

我之所以感到沮丧,部分原因在于GetNationalityList和GetAllAgencies代码段在候选控制器(现在已注释掉的位)中正常工作并正确分配了值,但在家庭控制器中却以不同的方式工作。

重要提示,有人吗?

我相信这篇文章会有所帮助。 http://toddmotto.com/all-about-angulars-emit-broadcast-on-publish-subscribing/我有一个类似的问题,但我需要从工厂排放。 我的问题在这里得到了回答。

角$ rootScope。$ on未定义

第二点更多的是您的问题,尽管本质上不是异步的JavaScript,而是Angular服务,例如GetAllAgencies服务。 您正在进行异步调用,但不等待响应。 这就是为什么当您手动分配它时都能正常工作的原因。 尝试将您的alert() 放在getData()调用的回调函数中。 这应该突出该过程应如何工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM