我正在使用angular $resource
来执行GET操作。我就是这样做的:
var query = {customerid: $stateParams.customerid}
$resource('api/reports/running_count').get(query).$promise.then(function(value) {
$scope.runningInstance = value;
});
我也是这样尝试的:
$resource('api/reports/running_count').get(query, function(value) {
$scope.runningInstance = value;
});
请求返回一个数字。我用chrome的开发者工具检查了响应。请求确实按如下方式发送:
<base-url>/api/reports/running_count?customerid=<id>
响应再次按预期返回一个数字。
但是当我在回调函数中放置一个断点时,value
又是一个承诺,而不是一个数字。不知道我做错了什么。
答案 0 :(得分:1)
当响应是主要的时,$resource
服务不起作用。它使用angular.copy
将数据复制到$resource
对象,angular.copy
不会将原始数据复制到对象。它只能制作其他对象属性的深层副本。
来自文档: 1
angular.copy
创建
source
的深层副本,该副本应该是对象或数组。
如果提供了目标,则会删除其所有元素(对于数组)或属性(对象),然后将源中的所有元素/属性复制到该目标。
如果
source
不是对象或数组(包括null
和undefined
),则会返回source
。
在您的情况下,源不是对象,而您只获得$promise
服务附加到资源对象的$resource
属性。
答案 1 :(得分:0)
来自角度示例https://docs.angularjs.org/api/ngResource/service/$resource:
var User = $resource('/user/:userId', {userId:'@id'});
User.get({userId:123}, function(user, getResponseHeaders){
user.abc = true;
user.$save(function(user, putResponseHeaders) {
//user => saved user object
//putResponseHeaders => $http header getter
});
});
把你的价值放在那里。
答案 2 :(得分:0)
据我所知,如果您想使用query value
获取数据,那么服务器获取query value
作为字符串。当您从搜索框发送查询时,它很有用。例如,想要按名称或其他东西搜索产品,那么就可以使用。
在服务中:
var query = {productname: '123'}
getProducts: function(query) {
var getProducts = $resource('/api/products', {}, {
'get': {method: 'GET', isArray: true}
});
return getProducts.get(query);
}
和服务器端将收到req.query.productname
,因此产品名称为string
,因此如果需要,您需要将其转换为number
。
但如果您想通过id
查找产品,则应将id
作为参数发送,而不是查询完全匹配的,也可以作为字符串发送。
例如在服务中:
getProductById: function(id) {
var getProductById = $resource('/api/products/:id', {id: '@id'}, {
'get': {method: 'GET'}
});
return getProductById.get({id: id});
}
所以服务器端将收到req.params.id