Angular $resource 然后不返回数据
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;});
});
工厂和控制器中的 then 部分未从 api 资源返回数据。相反,它 returns e { $promise=Promise, $resolved=true, toJSON=function(), more...}
可以在控制台中看到。
示例 api 资源中的 url:
https://live.reddcoin.com/api/addr/RszZrK51ur5G67y3Wy6niTnawdYYdBRZEq/balance
试试这个:
.controller('TwoController', function($scope, apiData){
apiData.full('RszZrK51ur5G67y3Wy6niTnawdYYdBRZEq').then(function(data){
console.log(data);
$scope.price = data;
});
});
请记住,承诺是链接在一起的。所以尽管你在成功回调中 return 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>
我不确定为什么 $resource
没有按承诺在对象 return 中包含数据(不是对象格式),它显示如下结果
e {$promise: Promise, $resolved: true} // 1003021043401956 isn't included there
我认为 get 请求需要来自服务器的 returned 对象。因此,如果它 return 不是一个对象,那么它不会在响应中包含相同的对象
有两种方法可以解决这个问题。
- 以
{'data': '1003021043401956'}
等对象格式执行 return 数据
在资源中创建您自己的 get
请求对象,它将在它之前修改 return 承诺对象。
var apiRequest = $resource("https://live.reddcoin.com/api/addr/:address/balance", {}, {
get: {
method: 'GET',
transformResponse: function(response){
return {data: response}; //creating object
}
}
});
我有这个带有工厂和控制器的简单应用程序:
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;});
});
工厂和控制器中的 then 部分未从 api 资源返回数据。相反,它 returns e { $promise=Promise, $resolved=true, toJSON=function(), more...}
可以在控制台中看到。
示例 api 资源中的 url: https://live.reddcoin.com/api/addr/RszZrK51ur5G67y3Wy6niTnawdYYdBRZEq/balance
试试这个:
.controller('TwoController', function($scope, apiData){
apiData.full('RszZrK51ur5G67y3Wy6niTnawdYYdBRZEq').then(function(data){
console.log(data);
$scope.price = data;
});
});
请记住,承诺是链接在一起的。所以尽管你在成功回调中 return 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>
我不确定为什么 $resource
没有按承诺在对象 return 中包含数据(不是对象格式),它显示如下结果
e {$promise: Promise, $resolved: true} // 1003021043401956 isn't included there
我认为 get 请求需要来自服务器的 returned 对象。因此,如果它 return 不是一个对象,那么它不会在响应中包含相同的对象
有两种方法可以解决这个问题。
- 以
{'data': '1003021043401956'}
等对象格式执行 return 数据
在资源中创建您自己的
get
请求对象,它将在它之前修改 return 承诺对象。var apiRequest = $resource("https://live.reddcoin.com/api/addr/:address/balance", {}, { get: { method: 'GET', transformResponse: function(response){ return {data: response}; //creating object } } });