Angular $资源然后不返回数据

时间:2016-04-14 09:55:39

标签: javascript angularjs angular-resource

我有这个简单的应用程序,有工厂和控制器:

angular.module('AppName', ['ngResource'])

.factory('apiData', ['$resource', function ($resource) {
    var apiRequest = $resource("https://live.reddcoin.com/api/addr/:address/balance");
    return {
        full: function(address){
            return apiRequest.get({address: address}).$promise
            .then(
                function(data){ console.log(data); return data;},
                function(){ return 'error'; }
            );
        }
        }
}])

.controller('TwoController', function($scope, apiData){
    $scope.price = apiData.full('RszZrK51ur5G67y3Wy6niTnawdYYdBRZEq').then(function(data){console.log(data); return data;});
});

工厂和控制器中的后续部分不从api资源返回数据。相反,它会返回e { $promise=Promise, $resolved=true, toJSON=function(), more...},如控制台中所示。

示例api资源中的url: https://live.reddcoin.com/api/addr/RszZrK51ur5G67y3Wy6niTnawdYYdBRZEq/balance

And the example on jsfiddle

2 个答案:

答案 0 :(得分:2)

我不确定为什么$resource没有包含数据(不是对象格式)在对象返回中的承诺,它显示如下结果

e {$promise: Promise, $resolved: true} // 1003021043401956 isn't included there

我认为get request期望从服务器返回对象。因此,如果它没有返回一个对象,那么它将不会包含相同的响应

有两种方法可以解决这个问题。

  1. {'data': '1003021043401956'}
  2. 等对象格式返回数据
  3. 在资源中创建自己的get请求对象,在返回promise对象之前将对其进行修改。

    var apiRequest = $resource("https://live.reddcoin.com/api/addr/:address/balance", {}, {
       get: {
          method: 'GET',
          transformResponse: function(response){
             return {data: response}; //creating object
          }
       }
    });
    
  4. Fiddle

答案 1 :(得分:1)

试试这个:

.controller('TwoController', function($scope, apiData){
    apiData.full('RszZrK51ur5G67y3Wy6niTnawdYYdBRZEq').then(function(data){
        console.log(data); 
        $scope.price = data;
    });
});

请记住,承诺是链接的。因此,尽管在成功回调中返回datathen的结果仍然是一个承诺(内部结果为data)。

工作代码段:



angular.module('AppName', ['ngResource'])

.factory('apiData', ['$resource', function ($resource) {
    var apiRequest = $resource("https://live.reddcoin.com/api/addr/:address/balance");
    return {
        full: function(address){
            return apiRequest.get({address: address}).$promise
            .then(
                function(data){ console.log(data); return data;},
                function(){ return 'error'; }
            );
        }
        }
}])

.controller('TwoController', function($scope, apiData){
    apiData.full('RszZrK51ur5G67y3Wy6niTnawdYYdBRZEq').then(function(data){console.log(data); $scope.price =  data;});
});

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://code.angularjs.org/1.2.23/angular-resource.min.js"></script>
<div ng-app="AppName" ng-controller="TwoController">{{price}}</div>
&#13;
&#13;
&#13;