2014-10-05 135 views
0

我正在學習AngularJs,而且我正面臨一個問題。我想在視圖中顯示項目數組。首先在控制器中使用$ scope.arrName = []定義數組,然後我從第三方服務接收數據並使用$ scope.arrName.push(data [i])將其添加到數組中。我發現爲了讓我的視圖呈現出更改,我必須在將數據推送到數組之後插入$ scope。$ apply。

有沒有辦法修改數組並在沒有$ scope的情況下渲染更改$ apply? 如果我用this.arrName更改$ scope.arraName,爲什麼代碼會中斷? (它拋出遺漏的類型錯誤:無法讀取屬性未定義 '推')

參考代碼

控制器

angular.module('testApp') 
    .controller('testCtrl', function($scope) { 

    $scope.objects = []; 

    var service = new thirdPartyService(); 

    service.getData(function(err, data) { 
     if (err) { 
     console.log('Error'); 
     } else { 
     for (var i = 0; i < data.Contents.length; i++) { 
      $scope.objects.push(data.Contents[i].Key); 
      $scope.$apply(); 
     } 
     } 
    }); 
    }); 

查看

只是一個NG重複顯示數據

回答

0
  • this.arrName不存在,因爲您沒有創建本地var arrName,您將一個arrName字段附加到$scope,該字段是與您的控制器不同的實體。
  • 至於你的渲染,你只是嘗試沒有$apply?您的ng-repeat 應該檢測到支持數組中的任何更改並相應地進行更新。
+0

是一樣的。如果在將它設置爲this.arrName之前寫入var arrName = [],則沒有任何更改。我不知道模型爲什麼不跟蹤arrName,我必須手動$ scope。$ apply將更改推送到視圖。 – wOvalle 2014-10-05 04:19:27

0

我通常通過回調來$apply ......

$scope.$apply(function(){ 
    $scope.objects.push(data.Contents[i].Key); 
}); 
相關問題