$ scope数组和$ scope。$ apply in angularjs

时间:2014-10-05 00:05:24

标签: angularjs angularjs-scope

我正在学习AngularJs,我遇到了一个问题。

我想在视图中显示一系列项目。首先在控制器中我使用$ scope.arrName = []定义数组,然后我从第三方服务接收数据并使用$ scope.arrName.push(data [i])将其添加到数组中。我想通了,为了我的视图呈现更改,我必须在将数据推送到数组后插入$ scope。$ apply。

有没有办法修改数组并在没有$ scope的情况下呈现更改。$ apply? 如果我用this.arrName更改$ scope.arraName,为什么代码会中断? (它抛出未捕获的TypeError:无法读取未定义的属性'push')

参考代码

控制器

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

查看

只需重复一次即可显示数据

2 个答案:

答案 0 :(得分:0)

  • this.arrName因为您没有创建本地var arrName而不存在,您将arrName字段附加到$scope,这是与您的控制器不同的实体。
  • 至于您的渲染,您是否只是在没有$apply的情况下尝试过?您的ng-repeat 检测后备阵列中的任何更改并相应地更新。

答案 1 :(得分:0)

我通常会将回调传递给$apply ...

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