所以我的资源定义如下:
angular.module('questionService', ['ngResource'])
.factory('QuestionService', function($http, $resource) {
var QuestionService = $resource('/api/questions/:key', {}, {
query: {
method:'GET',
isArray:true,
},
save: {
method: 'POST',
}
});
return QuestionService
});
稍后我会采取一些表格输入并执行以下操作
var newQ = {
txt: $scope.addTxt
};
QuestionService.save(newQ)
服务器通过重新发出对象的JSON并使用新的唯一ID设置位置标头来响应POST请求。问题是Angular没有保存将JSON或位置标头返回到对象中,并且没有使用服务器中的ID进行设置以供将来操作。我尝试过很多事情,例如:
transformResponse: function(data, headersGetter) {
locationHeader = headersGetter().location;
key = locationHeader.split('/').slice(-1)[0];
data.key = key;
return data;
}
但是,返回的数据项目似乎没有得到使用。我错过了什么吗?这似乎是与REST API交互的一个非常常见的用例。
谢谢!
答案 0 :(得分:3)
您需要有一个成功处理程序来手动将新ID分配给newQ
:
QuestionService.save(newQ, function(data) {
newQ.id = data.id;
});
但实现同样的目标还有更好的方法。由于您的QuestionService
是资源类对象,因此您可以像这样实例化newQ
:
var newQ = new QuestionService({text: $scope.addTxt});
然后,拨打$save()
的{{1}}:
newQ
现在newQ.$save();
应该有服务器返回的新ID。
答案 1 :(得分:0)
我有运行WebApi2的Asp.Net服务器,我使用Ok(数字)返回内容,然后返回例如' 6'结果。一旦它返回,角度显示一个包含承诺和状态的对象,原型和深度重复的层次结构,但没有价值,没有' 6' 所以我去了解数据的位置,看看数据在哪里我定义了一个变换,我看到了两个数据,但它不是一个json ......
稍后我将其更改为以下内容,现在我的成功函数中有一个obj,它具有名为' returnValue'的子属性。 (正如我所定义的),这个对象具有我的价值。
transformResponse: function(data, header){
var obj={};
obj.returnValue=angular.fromJson(data);
return obj;
},