2014-06-25 34 views
1

我的申請要求候選人設立機構和國籍(等等)。我想在全局變量中設置代理機構和國籍列表,以便可以通過配置文件屏幕訪問它們,而不是每次都從數據庫中檢索它們(因爲它們是當前的)。感謝這裏的其他問題,我到目前爲止...但一個關鍵的難題顯然缺失。數據正在從數據庫中檢索,但在其他地方不可見。

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); 
} 

警報不火的。

從candidatescontroller.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功能(即在上面的例子中註釋掉位)以外的數據,這是人口&通過確定&我的下拉列表填充。當我不這樣做時,$ rootScope值是'未定義'。

我有2個理論 -

  1. 莫名其妙HomeController的$ rootScope是不被認可,因爲我打算在全球(這是可變的只是名字)和其他一些「回傳」行動需要採取(我已經嘗試了幾個變化「return nationalitieslist.data」並將其分配給其他變量/句柄)。此外,nationalitieslist.data與硬編碼列表格式相同,只是時間更長。

  2. 我被javascript的異步性質所吸引,當我加載第二頁時,數據就不存在了。我不相信這是正確的,因爲數據庫調用正在完成,我有一個警告,顯示我一個隨機的國籍名稱,它在那裏。

我的一部分挫折從事實GetNationalityList和GetAllAgencies代碼段工作,並在候選控制器正確賦值(即現在註釋掉位),但在HomeController的微妙不同的工作來。

重要提示,請任何人?

回答

0

你的第二點是更您的問題,雖然它不是JavaScript代碼是在自然界中異步,它的這種角服務,您GetAllAgencies服務。您正在進行異步調用,但不等待響應。這就是爲什麼當你手動分配它的時候,它一切正常。試着把你的alert()裏面的的回調函數調用到getData()。這應該強調過程應該如何工作。

相關問題