我有一个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实例,以便我的模板正确呈现?
答案 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;
});
});