我正在学习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();
}
}
});
});
查看
只需重复一次即可显示数据
答案 0 :(得分:0)
this.arrName
因为您没有创建本地var arrName
而不存在,您将arrName字段附加到$scope
,这是与您的控制器不同的实体。$apply
的情况下尝试过?您的ng-repeat 应检测后备阵列中的任何更改并相应地更新。 答案 1 :(得分:0)
我通常会将回调传递给$apply
...
$scope.$apply(function(){
$scope.objects.push(data.Contents[i].Key);
});