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