2

我有一个宁静的 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 对象?

4

1 回答 1

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 以它的方式工作的原因。您的需求略有不同,因此需要自定义操作。

于 2013-09-06T20:19:58.093 回答