ngResource retrive unique ID from POST response after $save()

亡梦爱人 提交于 2019-12-10 17:36:30

问题


So I have a Resource defined as follows:

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
});

And later on I take some form input and do the following

var newQ = {
    txt: $scope.addTxt
};

QuestionService.save(newQ)

The server responds to the POST request both by reissuing the JSON for the object and setting the location header with the new unique ID. The problem is that Angular is not saving that returned JSON or the location header into the object and it is not getting set with the ID from the server for future operations. I've tried a number of things such as:

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

However the returned data item doesn't seem to be getting used. Am I missing something? This seems like a pretty common use case for interacting with a REST api.

Thanks!


回答1:


You need to have a success handler to assign the new id to newQ manually:

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

But there is a better to achieve the same. Because your QuestionService is a resource class object, you can instantiate your newQ like this:

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

Then, call $save() of newQ:

newQ.$save();

Now newQ should have the new id returned by the server.




回答2:


I have Asp.Net server with WebApi2 running, i use Ok(number) to return content, and it return for example '6' as result. once it return, the angular show an object containing promise and state, and prototypes and a deep repeated hierarchy, but no value, no '6'. So i went to see where the data goes, for seeing where the data is i define a transform, and i see awo the data, but it's not a json...

later i change it to following, and now i have a obj in my success function, which has sub property called 'returnValue' (as i defined), and this object hold my value.

transformResponse: function(data, header){
    var obj={};
    obj.returnValue=angular.fromJson(data);
    return obj;
},


来源:https://stackoverflow.com/questions/19100323/ngresource-retrive-unique-id-from-post-response-after-save

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!