簡體   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