如何使用angular更新ng-repeat内的列表?

时间:2014-11-27 05:47:16

标签: javascript angularjs angularjs-ng-repeat ionic-framework

我有一个离子列表

<ion-list>
  <ion-item ng-repeat="item in items">
    Hello, {{item.name}}!
  </ion-item>
</ion-list>

然后,在控制器中我有一个事件:

$scope.items = someData();
itemsRef.on('event', function (response) {
    console.log(response); // this is an object containing he "name" property
});

我想将response附加为ion-item,而不插入html,但会以某种方式将响应添加到项目中

编辑:

我尝试过:$scope.items.push(response);但奇怪的是我得到了Uncaught TypeError: undefined is not a function

编辑:它看起来不只是$scope.items.push(response);,而是$scope.items[next_key_here] = response;

请参阅jsfiddle

2 个答案:

答案 0 :(得分:2)

如果itemRef是Angular服务,您只需将对象添加到items数组中:

$scope.items.push( response );

如果itemRef使用一些非Angular异步服务来获取其响应,则需要告诉Angular事情已更新:

$scope.$apply( function() {
    $scope.items.push( response );
});

如果您遇到$ scope的问题,使用带有点的$ scope变量总是一个好主意,例如使用$ scope.data.items而不是$ scope.items。

有关原因的详尽讨论,请参阅http://jimhoskins.com/2012/12/14/nested-scopes-in-angularjs.html

答案 1 :(得分:1)

  

我尝试过:$scope.items.push(response);但奇怪的是我得到了Uncaught TypeError: undefined is not a function

这是因为$ scope.items在您尚未填充值之前访问它时不是Array对象。尝试做这样的事情,这应该有效:

if ($scope.items && $scope.items instanceof Array) {
  $scope.items.push(response);
}