AngularJS不会将新记录推送到数组中

时间:2015-10-26 16:39:10

标签: javascript ruby-on-rails ruby angularjs push

我创建了一条新记录,这条记录成功添加到数据库中。非常好。 但问题是它不会更新现有记录列表 - 意味着push函数似乎不起作用。

这是在控制器内部:

$scope.posts = Posts.query();
...
$scope.saveForm = function(post) {
  var p = new Post(post);
  p.$save(function (response) {
  $scope.posts.push(angular.extend(p, response.id));
    console.log('saved');
    console.log(response.id);
  });
};

我尝试仅使用push()而不使用angular.extend(),还试图在控制器的末尾添加$scope.posts = Posts.query();,但它没有帮助 - 新记录仍然是没有添加到当前的帖子列表中。

可能是什么原因引起的?我在SO上找到了类似的主题,但它没有帮助我解决这个问题。

谢谢。

修改 我在console.log($scope.posts);新帖子中看到,它只是没有出现在帖子列表中。

EDIT2: 我在$scope.$apply();命令之后也尝试push,但它导致了以下错误消息:

Error: [$rootScope:inprog] $digest already in progress

EDIT3: 我发现当我尝试删除记录时,列表也不会更新(仅在刷新后)。

EDIT4: 当我添加一条新记录时,在JS中是这个输出(新记录,正确保存,只是在列表中没有更新所有项目):

Resource {id: Object, title: "hohohohooho", body: null, starred: null, created_at: "2015-10-27T04:00:06.943Z"…}

ID可以response.id.$oid访问。

2 个答案:

答案 0 :(得分:0)

这对我有用......

p.$save().then(function(response){ 
     $scope.posts.push(response.id) 
});

答案 1 :(得分:0)

Angular extend不会保存列表/数组。 它使用新项扩展旧列表/数组。