2013-05-10 20 views
0

我想動態地填充ListBox。但它不適用於Ajax請求。ajax請求數據未被加載 - Angular JS

這是我正在做的。

我的Ajax請求:

angular.module("confessions_module").factory("Universities",function(){ 

    var service = {}; 

     service.getUniversitiesAjax=function(callback) 
     { 
      $.ajax({ 
       type:'GET', 
       url:'myurl', 
       success:function(e) 
       { 
        universitiesList = $.parseJSON(e); 
        callback(universitiesList); 
       } 

      }); 

//    var a = [{ 'name':'asdasdsad','id':123},{ 'name':'mozi','id':123}]; 
//    callback(a) 
     } 
    return service; 
}); 

我的控制器調用該函數和填充陣列:在My Ajax Request評論

    <select id="dd_universities"> 
         <option ng-repeat="uni in unis">{{uni.name}}</option> 
        </select> 

現在有兩條線:

Universities.getUniversitiesAjax(
    function(university) 
    { 

     for(var i=0;i<university.length;i++) 
     { 
      var unii = { 'name' : university[i].name , 'id' : university[i].id }; 
      $scope.unis.push(unii); 
     } 
    } 
); 

我見碼。當我uncomment這兩行,我的數據填充沒有問題。但是,無論何時我嘗試使用ajax請求代碼填充它,因爲它現在正在發生。這是行不通的。可能是什麼問題呢 ?

+1

您應該使用$ http而不是$ .ajax,否則您可能會遇到一些問題 – 2013-05-10 17:10:06

+0

$ http是由angular提供的嗎? – Mj1992 2013-05-10 17:10:45

+0

是的,它是一個可注入的服務,然後你可以簡單地'$ http.get(「myurl」)。success(function(){})'這個最大的好處是響應在角框架內消化,不必使用$ scope。$ apply()'。 http://docs.angularjs.org/api/ng.$http – 2013-05-10 17:50:36

回答

2

您的AJAX回調執行的角度「外」,這樣即使你改變了作用域屬性:

$scope.unis.push(unii); 

角不會注意到這些變化。在您的for循環後呼叫$scope.$apply()。這將導致Angular運行一個digest cycle,它會注意到您的更改並更新您的視圖。