2015-08-27 41 views
0

我有以下的angularJs代碼。當我的源數據發生變化時,我的ng-repeat不會更新我的視圖。我查看了其他帖子,並在我的ajax成功回調結束時添加了$scope.$apply();,$scope.$digest();,但它沒有幫助。這個想法是,頁面在開始時會有一個空表,在ajax調用onReady()之後,它會用數據填充行。可能有人點我什麼,我在這裏失蹤或更好的方法來達到同樣的ng-repeat無法反映源變量何時被修改

JS:

(function() { 
    var app = angular.module("jmeter-module", []); 
    app.controller('JmeterTableController', ['$scope', function($scope){ 
     $scope.data = []; 
     $(document).ready(function(){ 
      var url = "jmeterTableData.html"; 
      fetchTableData(url, 10, 25); 
     }); 

     function fetchTableData(url, minAge, maxAge){ 
      $.ajax({ 
       type: "GET", 
       url: url, 
       data: { minAge : minAge, 
        maxAge : maxAge }, 
       datatype: "json", 
       success: function(data){ 
        /*If I try to print data here, I see the values rightly getting returned*/ 
        $scope.data = data; 
       }, 
       error: function(e){ 
        console.log(e); 
       } 
      }); 
     } 
    }]); 

})(); 

JSP:

<div id="buildGroupsParentDivId" ng-controller="JmeterTableController as row"> 
. 
. 
. 
<tbody id="jmeter-table-content" > 
      <tr ng-repeat="val in row.data"> 
        <td><img title="History" src="/images/history.png" width="20" height="20"></td> 
        <td><input type="checkbox" value="save"></td> 
        <td>{{val.firstName}}</td> 
        <td>{{val.lastResult}}</td>      
       </tr> 
</tbody> 

回答

2

問題是$執行.ajax超出了Angular的摘要循環的範圍。你可以得到這個與$範圍工作$申請,但因爲你已經在使用角度,最好使用AngularJS XHR輔助方法:

https://docs.angularjs.org/api/ng/service/ $ HTTP

// Simple GET request example : 
$http.get('/someUrl'). 
    then(function(response) { 
    // this callback will be called asynchronously 
    // when the response is available 
    }, function(response) { 
    // called asynchronously if an error occurs 
    // or server returns response with an error status. 
    }); 
+1

除非你有一個很好的理由通過ajax做一個簡單的http請求,這是正確的答案=) –

+0

還有一件事,如果你真的需要調用文檔就緒的函數,你也可以切換到使用angular.element(document).ready()函數,但是提供的示例代碼不需要用這種方式進行包裝。只需定義您的應用和控制器,並讓Angular在知道文檔已準備就緒時採取行動。例如http://plnkr.co/edit/6a6TSR?p=preview – wesww