4

所以我有一个资源定义如下:

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 或 location 标头保存到对象中,并且没有使用来自服务器的 ID 进行设置以供将来操作。我尝试了很多事情,例如:

transformResponse: function(data, headersGetter) {
    locationHeader = headersGetter().location;
    key = locationHeader.split('/').slice(-1)[0];
    data.key = key;
    return data;
}

然而,返回的数据项似乎没有被使用。我错过了什么吗?这似乎是与 REST api 交互的一个非常常见的用例。

谢谢!

4

2 回答 2

3

您需要有一个成功处理程序来newQ手动分配新 id:

QuestionService.save(newQ, function(data) {
    newQ.id = data.id;
});

但是有更好的方法来实现相同的目标。因为你QuestionService是一个资源类对象,你可以newQ像这样实例化你:

var newQ = new QuestionService({text: $scope.addTxt});

然后,调用$save()newQ

newQ.$save();

现在newQ应该有服务器返回的新 id。

于 2013-09-30T18:32:46.763 回答
0

我有运行 WebApi2 的 Asp.Net 服务器,我使用 Ok(number) 返回内容,并返回例如“6”作为结果。一旦它返回,角度显示一个包含承诺和状态的对象,以及原型和深度重复的层次结构,但没有值,没有“6”。所以我去看看数据的去向,为了查看数据在哪里,我定义了一个转换,我看到了数据,但它不是 json ......

后来我把它改成跟随,现在我的成功函数中有一个obj,它有一个名为'returnValue'的子属性(正如我定义的那样),这个对象保存我的值。

transformResponse: function(data, header){
    var obj={};
    obj.returnValue=angular.fromJson(data);
    return obj;
},
于 2016-04-09T07:47:08.170 回答