Использование $ ресурса с сервисом отдыха

0

Я пытаюсь ознакомиться с $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

Теги:
rest
angular-resource
angularjs-resource

1 ответ

2
Лучший ответ

Поскольку вызов API REST асинхронен, вы кричите, ожидая, что возвращаемое обещание будет разрешено при использовании Req.get({ id:4 });

Использование:

Req.get({ id:4 }).$promise.then(function(result){
  console.log(JSON.stringify(result));
});

вместо.

Для второй части вашего вопроса: использование данных без свойства id должно быть прекрасным. Однако эти данные будут переданы в тело запроса, а не как параметр запроса.

  • 0
    Спасибо за ваш ответ. Что вы подразумеваете под «Использование данных без идентификатора»? Я пытался заменить Req.get({ id:4 }) на Req.get({ }) или даже Req.get() но это не сработало. Также не могли бы вы связать меня, где найти документ об этом $promise вы использовали?
  • 0
    Не уверен, но Req.get() или, возможно, Req.get(null) должны работать. Посмотрите раздел «Возврат» документации ngResource : docs.angularjs.org/api/ngResource/service/$resource для объяснения возвращенного обещания.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню