$ resource $ delete不会删除资源对象

时间:2013-02-03 03:40:26

标签: angularjs

我有一个AngularJS $resource

App.factory("pjApi", ["$resource", function($resource) {
  return $resource("/api/:user/:action/:post_id/", {action:"posts"});
}]);

在我的控制器中,我基本上就像这样使用它:

$scope.deletePost = function(post_id) {
    $scope.posts.forEach(function(post) {
        if (post_id === post.id)
            post.$delete({user:"tjb1982",action:"delete",post_id:post.id});
    });
}

服务器给出状态为200,application / json和body的响应:“1”

Angular对此响应的作用是删除已删除的Resource对象实例,但随后Angular将其替换为来自服务器的响应(即“1”),就像我正在创建或更新一样:

posts [Resource { 0="1", $$hashKey="00D", $get=function(), more...}]

所以我的模板更新了这个新的(大部分是空白的)信息,这正是我想要避免的。我已经尝试从服务器返回任何内容或“0” - 没有返回任何结果导致资源实例被完全保留,返回“0”导致与返回“1”相同。

Angular正在寻找什么响应才能完全删除此Resource实例,以便我的模板正确呈现?

2 个答案:

答案 0 :(得分:10)

在资源上调用$delete仅将HTTP请求发送到服务器;如果你想从某个客户端表示中删除项目 - 比如数组 - 你必须自己这样做。

因此,对于您的示例,您可以尝试以下内容:

$scope.deletePost = function(post_id) {
  $scope.posts.forEach(function(post, index) {
    if (post_id === post.id) {
      post.$delete({user:"tjb1982",action:"delete",post_id:post.id}, function() {
        $scope.posts.splice(index, 1);
      });
    }
  });
}

答案 1 :(得分:5)

// instance is cleared on success
post.$delete({/* request data */}, function() {
    // remove empty element from array
    $scope.posts = $scope.posts.filter(function(el) {
        return el.id !== undefined;
    });
});