Я пытаюсь ознакомиться с $resource
, чтобы использовать веб-службы RESTful.
Итак, для этой попытки я объявил такую фабрику:
'use strict';
angular.module('BalrogApp').factory('Req', ['$resource', function($resource) {
return $resource('http://localhost:8000/api/catalog/requests/:id', {id: '@id'}, {
'update': { method: 'PUT'},
'query': { method: 'GET'}
});
}]);
В моем контроллере у меня есть следующее:
angular.module('BalrogApp').controller('requestsController', function(Req, $route, $rootScope, $scope, $location, $routeParams) {
this.$route = $route;
var controllerScope = this;
this.r = Req.get({ id:4 });
console.log(this.r);
Это прекрасно работает, в моей консоли я вижу свой объект с данными, полученными из служб для элемента с id 4.
Однако я не уверен, что правильно загружаю данные, так как объект, который я храню в r
содержит идентификатор, подобный ему в деталях объекта (нажатие на "Объект" в консоли браузера отображает детали объекта, включая его идентификатор) но сам объект (r
), отображаемый на консоли, содержит только 2 поля и представлен следующим образом: Object { $promise: Object, $resolved: false }
.
Итак, в конце, console.log(this.r);
работает, но console.log(this.r.id);
даже если r
должен содержать идентификатор, как в деталях объекта, от инспектора браузера.
Кроме того, как я могу настроить эту службу, чтобы иметь возможность использовать get()
с параметром id
же, как я делаю, что приводит к вызову http://localhost:8000/api/catalog/requests/:id
но также без параметра id
что приводит к вызову http://localhost:8000/api/catalog/requests
Поскольку вызов API REST асинхронен, вы кричите, ожидая, что возвращаемое обещание будет разрешено при использовании Req.get({ id:4 });
Использование:
Req.get({ id:4 }).$promise.then(function(result){
console.log(JSON.stringify(result));
});
вместо.
Для второй части вашего вопроса: использование данных без свойства id должно быть прекрасным. Однако эти данные будут переданы в тело запроса, а не как параметр запроса.
Req.get({ id:4 })
наReq.get({ })
или дажеReq.get()
но это не сработало. Также не могли бы вы связать меня, где найти документ об этом$promise
вы использовали?Req.get()
или, возможно,Req.get(null)
должны работать. Посмотрите раздел «Возврат» документации ngResource : docs.angularjs.org/api/ngResource/service/$resource для объяснения возвращенного обещания.