我正在尝试使用ngresource查询方法获取内容。
我有这样的工厂
.factory('factoryName', ['$resource','API_URL', function ($resource,API_URL) {
return $resource(
API_URL+'route1/route2/:userId',{userId: '@_userId'},
{
update: {method: 'PUT'},
query:{method:'GET'}
}
);
}])
我的控制器看起来像这样
.controller('myCtrl',function($scope,$http,factoryName,userService){
$scope.userId = userService.getUser().userId;
$scope.result =factoryName.query({userId:$scope.userId})
console.log($scope.result)
})
我发现,那是记录[对象对象],同时当我在网络中跟踪响应时,它运行良好并且响应我想要的结果。但我的$ scope.result是[object object]。我尝试了无数的技巧来获取[对象]的内容,但我不能。
我也试过
.controller('myCtrl',function($scope,$http,factoryName,userService){
$scope.userId = userService.getUser().userId;
factoryName.query({userId:$scope.userId},
function(response){
$scope.result = response
console.log(response)
})
})
甚至没有给我任何东西。
我刚才意识到,响应显示在视图中
<div ng-app="myApp">
<div ng-controller="myCtrl">
<h2>{{result.something}}</h2>
</div>
</div>
但是,我不知道为什么它没有正确登录控制台
答案 0 :(得分:0)
您的代码中存在一些问题。
首先,angular-resource是异步的。这意味着
$scope.userId = userService.getUser().userId;
$scope.result =factoryName.query({userId:$scope.userId})
这不起作用。
你应该这样做:
$scope.user = userService.getUser();
$scope.user.$promise.then(function(user) {
$scope.result = factoryName.query({userId:user.userId})
})
答案 1 :(得分:0)
Angular ng-resource查询是异步的 - 它创建空数组(而不是加载数据),并提供$ promise属性,其中包含在数据加载完成时解析的promise。正确的方法是
$scope.result = factoryName.query({userId:$scope.userId});
$scope.result.$promise.then(function() {
console.log($scope.result);
});
此外,正如在其他答案中提到的那样,用户负载也会发生同样的情况
答案 2 :(得分:0)
对远程服务器的所有调用都是以异步方式完成的,因此您无法将结果同步分配给范围变量。有两种方法可以解决这个问题。
https://docs.angularjs.org/api/ngResource/service/$resource
通过回调函数:
select
id,
id as row_num,
A.date_created,
(select
payment_amount
from ap_form_payments
where form_id = '10242' and record_id = A.id
order by afp_id desc
limit 1) payment_amount,
ifnull((select
payment_status
from
ap_form_payments
where
form_id = '10242' and record_id = A.id
order by afp_id desc
limit 1),
'unpaid') payment_status,
(select
payment_id
from
ap_form_payments
where form_id = '10242' and record_id = A.id
order by afp_id desc
limit 1) payment_id
from ap_form_10242 A
join ap_form_payments
on A.id = ap_form_payments.afp_id
WHERE A.status = 1
order by payment_method asc
LIMIT 0 , 15;
另一个(首选)选项是使用稍后为$ resource服务引入的$scope.userId = userService.getUser(
function(user) {
$scope.userId = user.userId
}
);
。
$promise
答案 3 :(得分:0)
您的代码对我来说很好。我猜测控制台正在通过在记录它之前调用响应对象上的toString()来播放一个技巧。
尝试通过序列化来验证对象内容:scanf()
修改强>
您必须为query()提供回调,第一个回调用于成功操作,第一个参数是查询数据,第二个回调用于不成功操作。 Here's a fiddle for you:)