0

我试图熟悉$resource以使用RESTful Web服务。

所以,在尝试,我宣布一个工厂是这样的:

'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中的对象包含(在浏览器控制台中单击“对象”显示包括其ID的对象详细信息),但控制台上显示的对象本身(r)仅包含2个字段,其显示方式如下:Object { $promise: Object, $resolved: false }

因此,最后,console.log(this.r);工程,但console.log(this.r.id);不,即使r应该包含一个ID,就像在浏览器检查器的对象的详细信息。

另外,我怎么可以配置该服务,以便能够使用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)); 
}); 
代替210

对于问题的第二部分:使用没有id属性的数据应该没问题。但是,这些数据将在请求主体中传输,而不是作为请求参数传输。

+0

感谢您的回复。 “使用没有ID的数据”是什么意思?我尝试用'Req.get({})'或者'Req.get()'替换'Req.get({id:4})',但这不起作用。 你也可以链接我在哪里找到一些关于你使用的'$ promise'的文档? – Ellone

+0

不确定,但'Req.get()'或者''Req.get(null)'应该可以工作。查看ngResource文档的“返回”部分:https://docs.angularjs.org/api/ngResource/service/$resource以获取返回的承诺的解释。 –

+0

好吧,没有参数,这个错误会引发:'资源配置错误'get'。预期响应包含一个对象,但得到一个数组(请求:GET http:// localhost:8000/api/catalog/requests)'。 不是'$ resource('http:// localhost:8000/api/catalog/requests /:id''使'id'成为必填字段也许? – Ellone