ngResource retrive уникальный идентификатор из POST response после $save()
Итак, у меня есть ресурс, определенный следующим образом:
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)
Сервер отвечает на запрос POST как путем повторного выпуска JSON для объекта, так и путем установки заголовка location с новым уникальным идентификатором. Проблема в том, что Angular не сохраняет возвращенный JSON или заголовок location в объект, и он не устанавливается с идентификатором от сервера для будущих операций. Я пробовал много вещей, таких как как:
transformResponse: function(data, headersGetter) {
locationHeader = headersGetter().location;
key = locationHeader.split('/').slice(-1)[0];
data.key = key;
return data;
}
Однако возвращенный элемент данных, похоже, не используется. Я что-то упустил? Это кажется довольно распространенным случаем использования для взаимодействия с REST api.
Спасибо!
2 ответа:
Вам нужно иметь обработчик успеха, чтобы назначить новый идентификатор
newQ
вручную:Но есть и лучший способ добиться того же самого. Поскольку вашQuestionService.save(newQ, function(data) { newQ.id = data.id; });
QuestionService
является объектом класса ресурсов, вы можете создать экземпляр вашегоnewQ
следующим образом:var newQ = new QuestionService({text: $scope.addTxt});
Затем вызовите
$save()
изnewQ
:newQ.$save();
Теперь
newQ
должен иметь новый идентификатор, возвращаемый сервером.
У меня есть Asp.Net сервер с WebApi2 работает, я использую Ok (число) для возврата содержимого, и он возвращает, например, '6' в результате. как только он возвращается, angular показывает объект, содержащий обещание и состояние, прототипы и глубокую повторяющуюся иерархию, но без значения, без "6". Поэтому я пошел посмотреть, куда идут данные, чтобы увидеть, где находятся данные, я определяю преобразование, и я вижу awo данные, но это не json...
Позже я изменяю его на following, и теперь у меня есть obj в моей функции успеха, которая имеет свойство sub под названием 'returnValue' (как я определил), и этот объект содержит мое значение.
transformResponse: function(data, header){ var obj={}; obj.returnValue=angular.fromJson(data); return obj; },