AngularJS - 处理RESTful $资源响应

时间:2013-09-06 20:00:20

标签: javascript rest angularjs

我有一个安静的api和angularjs应用程序。 我在工厂内使用$ resource来处理这个api。 我有一个请求有问题。我发布我的api来创建一些元素。

/api/service/thing/make-things

我需要传递一些数据。这就是我在做的事情:

$scope.someRequest = new SomeRequest(); // factory object returning an $resource
$scope.someRequest.some_field = 'abc';
$scope.someRequest.$save({someAdditionalParams:'123'}, function(values){...handling response...});

它可以正常运行并发布我要发布的数据,但在这种特殊情况下,我的帖子响应是对象数组。

[{somestuff:'123'}, {somestuff:'321'} ... ]

Angular尝试将其映射回一个对象并向我抛出一个错误,该对象是预期的但得到了一个数组。我尝试使用isArray:1创建一个单独的资源方法,但它仍然失败并出现同样的错误。

所以,我的问题是:如何处理这种情况?是否可以取消将$ save结果复制到$ resource对象?

1 个答案:

答案 0 :(得分:5)

使用$ save,它会尝试将其映射回来。您可以使用isArray创建一个新操作:true,不会尝试将结果映射回来。你当然必须手动处理结果。

var someRequest = $resource('/api/service/thing/make-things',{'create':   {method:'POST', isArray:true}});
someRequest.create({some_field = 'abc',someAdditionalParams:'123'},function(data){
    $scope.someRequestArray = data;
});

真正的RESTful架构应该返回创建的内容,这就是为什么$ save以它的方式工作的原因。您的需求略有不同,因此需要自定义操作。