2016-03-16 55 views
0

我正在尝试获取ng资源查询方法上的内容。如何获取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是[对象对象]。我尝试无尽的伎俩来获取[对象对象]的内容,但我不能。

我也曾尝试

.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

你的代码对我来说看起来很好。我猜测控制台在你的响应对象上调用toString()来记录它之前正在玩弄一个技巧。console.log(JSON.stringify($scope.result));

编辑

你必须提供回调查询(),第一回调是一个全成操作,第一个参数是的:

试图通过其序列来验证对象的内容查询数据,不成功操作的第二个回调。 Here's a fiddle for you :)

+0

谢谢,它会返回:{“$ promise”:{“$$ state”:{“status”:0,“pending”:[[{“promise”:{“$$ state”:{“status”: 0}}},null,null,null]]}},“$ resolved”:false} – kplus

+0

忘记ngResource的性质,它确实使用异步操作,但不公开。你必须提供带有回调的query(),第一个回调是成功的操作,第一个参数是查询数据,第二个回调是不成功操作。这里有一个小提琴给你: https://jsfiddle.net/theuntitled/m7ep1beg/2/ –

+0

谢谢,我做了类似的事情之前,我发现,它显示在视图中,但它不只是记录在控制台 – kplus

0

你有几个问题你码。

第一个是角度资源是异步的。这意味着

$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}) 
}) 
+0

谢谢,我与用户服务没有问题,也没有用户ID,唯一的问题是获取查询的内容,这也执行良好,我可以看到浏览器网络中的响应 – kplus

0

角NG-资源查询是异步 - 它创造空数组(而不是加载的数据),并提供$承诺属性,它包含了承诺,解决当数据加载完成时。这样做的正确方法是

$scope.result = factoryName.query({userId:$scope.userId}); 
$scope.result.$promise.then(function() { 
    console.log($scope.result); 
}); 

此外,在其他的答案menotioned,同样可能发生在用户负载

+0

这不记录 – kplus

0

到远程服务器上的所有呼叫都以异步方式完成的,所以你不能同步分配导致您的范围变量。有两种方法可以处理这个问题。

https://docs.angularjs.org/api/ngResource/service/$resource

通过回调函数:

$scope.userId = userService.getUser(
    function(user) { 
    $scope.userId = user.userId 
    } 
); 

另一个(首选)选项是使用,后来推出了$资源服务$promise

$scope.userId = userService.getUser().$promise.then(
    function(user) { 
    $scope.userId = user.userId; 
    }, 
    function(err) { 
    $scope.err = err; 
    } 
); 
+0

谢谢,我与用户服务没有问题,也没有用户id,唯一的问题是获取查询的内容,这也执行得很好,我可以看到浏览器网络中的响应。 – kplus