2016-04-14 2 views
2

У меня есть это простое приложение с а завод и контроллер:

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;}); 
}); 

В то разделы как заводские, так и контроллер не возвращающие данные из апи ресурса. Вместо этого он возвращает e { $promise=Promise, $resolved=true, toJSON=function(), more...}, что видно на консоли.

URL-адрес из примера апи ресурса: https://live.reddcoin.com/api/addr/RszZrK51ur5G67y3Wy6niTnawdYYdBRZEq/balance

And the example on jsfiddle

ответ

2

Я не знаю, почему $resource не включает в себя данные (не в формате объекта) внутри объекта возвращения обещанием, это показать результат, как показано ниже

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

Я думаю, что запрос на получение ожидает объекта, возвращенного с сервера. Так что, если он не возвращает объект, то он не будет включать то же самое в ответ

Существует 2 способа решить эту проблему.

  1. ли возвращать данные в формате объект как {'data': '1003021043401956'}
  2. Создайте свой собственный объект get запроса внутри ресурса, который будет изменить, прежде чем он возвращает объект обещания.

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

Fiddle

1

Попробуйте это:

.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>

+0

Да, но 'data' должны быть возвращены данные разрешенного обещания, не так ли? – neptune

+0

, но вы не можете вернуть данные в обратном вызове «then» и назначить результат «then» для области. Результат «тогда» всегда является обещанием. Единственный способ присвоить данные самой области видимости - это назначить переменную области видимости в результате последующего обратного вызова. – fikkatra

+0

Получил его, но 'console.log (data);' в обратном вызове успеха все еще не показывают мне в консоли нужные мне данные. Вот чего я не понимаю. – neptune

Смежные вопросы