我想在$ scope变量中保存来自Rest-API的JSON-Data以供进一步使用。 问题是代码执行时,我在Firebug中看到我已成功获得JSON数据,但问题是,我无法将其保存在我的Scope变量中,我不知道原因。
我的app.js
var app = angular.module('shop', ['ngRoute','ngResource'])
.factory('Customerservice', function ($resource) {
return $resource('http://localhost:8080/Shop/:customer',{customer: "@customer"});
})
.config(function ($routeProvider, $locationProvider) {
$routeProvider.when('/name/:ID', {
templateUrl : "Customer/customers.html",
controller : 'customerController'
});
})
.controller('customerController', function ($scope,Customerservice) {
$scope.customerinfo = Customerservice.get({customer: "Mark"});
alert($scope.customerinfo);
});
就像我说的那样,我已经获得了JSON-Data,但问题出在我的Controller" customerController"中。我只是将警报功能放在我的代码中,以查看我的$ scope.customerinfo中的内容。而且,customerinfo的内容只是对象:对象。 我在使用Firebug进行重组时注意到了一些奇怪的事情。看起来警报是在get请求之前执行的。这可以解释为什么我的$ scope变量中没有数据。任何人都可以帮助我。
答案 0 :(得分:2)
重要的是要意识到调用$resource
对象方法会立即返回一个空引用(对象或数组,具体取决于isArray
)。从服务器返回数据后,将使用实际数据填充现有引用。
$scope.customerinfo = CustomerService.get({customer: "Mark"});
console.log($scope.customerinfo); //Empty object
但是,$resource
服务还附加了$promise
属性,该属性可用于延迟代码执行,直到数据从服务器到达:
$scope.customerinfo = CustomerService.get({customer: "Mark"});
console.log($scope.customerinfo); //Empty object
//USE $promise
$scope.customerinfo.$promise
.then(function(info) {
console.log($scope.customerinfo); //Fulfilled object
return info;
}).catch(function(errorResponse) {
console.log(errorResponse.status);
throw errorResponse;
});
资源实例和集合具有以下附加属性:
$promise
:创建此实例或集合的原始服务器交互的promise。成功时,使用相同的资源实例或集合对象解析promise,并使用来自服务器的数据进行更新。这使得在resolve section of $routeProvider.when()中使用它很容易推迟视图渲染,直到资源被加载。
失败时,使用http response对象拒绝承诺,但不包含
resource
属性。
答案 1 :(得分:1)
$resource
是async api所以你无法从函数调用的直接返回中获取值,它包含一个变量$promise
,它将返回promise
所以你需要调用{{1}它的功能
试试这个
then