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

Это прекрасно работает, в моей консоли, я могу видеть мой объект с данными, полученными из служб для элемента с идентификатором 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

ответ

2

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

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

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

вместо этого.

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

+0

Спасибо за ваш ответ. Что вы подразумеваете под «использованием данных без id»? Я попытался заменить 'Req.get ({id: 4})' на 'Req.get ({})' или даже 'Req.get()', но это не сработало. Также вы могли бы связать меня, где найти какой-нибудь документ об этом '$ обещании', который вы использовали? – Ellone

+0

Не уверен, но 'Req.get()' или, может быть, 'Req.get (null)' должен работать. Посмотрите раздел «Возврат» документации ngResource: https://docs.angularjs.org/api/ngResource/service/$resource для объяснения возвращенного обещания. –

+0

Ну, без параметра эта ошибка срабатывает: 'Ошибка в конфигурации ресурсов для действия' get'. Ожидаемый ответ содержать объект, но получил массив (Request: GET http: // localhost: 8000/api/catalog/requests) '. Не '$ resource ('http: // localhost: 8000/api/catalog/requests /: id'' make' id' обязательное поле может быть? – Ellone

Смежные вопросы