繁体   English   中英

角$资源然后不返回数据

[英]Angular $resource then not returning 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){
    $scope.price = apiData.full('RszZrK51ur5G67y3Wy6niTnawdYYdBRZEq').then(function(data){console.log(data); return data;});
});

factory和controller中的then节不会从api资源返回数据。 而是在控制台中返回e { $promise=Promise, $resolved=true, toJSON=function(), more...}

范例api资源的网址: https : //live.reddcoin.com/api/addr/RszZrK51ur5G67y3Wy6niTnawdYYdBRZEq/balance

还有jsfiddle上的示例

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

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

我认为get请求期望服务器返回对象。 因此,如果它不返回对象,则它不会包含相同的响应

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

  1. {'data': '1003021043401956'}以对象格式返回数据,例如{'data': '1003021043401956'}
  2. 在资源内部创建自己的get请求对象,该对象将在返回promise对象之前进行修改。

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

小提琴

尝试这个:

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

记住,诺言是连锁的。 所以,虽然你们返回data的成功回调,结果then仍然是一个承诺(以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> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM