AngularJS服务不返回承诺
问题描述:
我想从我的数据库使用AngularJS加载一些数据。 我有一个应该得到数据的服务和一个使用它的控制器。AngularJS服务不返回承诺
见下面我的代码:
angular.module('myApp')
.factory('panelService', ['$http', function ($http) {
return {
async: function() {
return $http.get('/test'); // this returns promise
}
};
}]);
angular.module('myApp')
.controller('panelCtrl', ['$scope', '$http', function ($scope, $http) {
var promise = panelService.async()
promise.then(
function(payload){
$scope.user = payload.data;
}
)
}]);
可惜,这是行不通的。没有数据被加载,我没有看到任何JSON对象到达浏览器。但是,如果我在我的控制器中将panelService.async()
替换为$http.get('/test')
,它可以正常工作。所以我的猜测是我的服务有错误或者没有正确调用。
答
的soulution是注入服务到控制器这样的:
angular.module('myApp')
.controller('panelCtrl', ['$scope', '$http', 'panelService', function ($scope, $http, panelService) {
var promise = panelService.async()
promise.then(
function(payload){
$scope.user = payload.data;
}
)
}]);
答
为了让您了解问题以及如何通过自己接下来的时间来修复它,让我们去通过你所需要的步骤当angularjs中的某些事情没有像预期的那样工作时。
首先,检查控制台。你应该得到的错误是这样的: TypeError: Cannot read property 'async' of undefined ...
这应该让你思考为什么async
父对象是不确定的,和你的代码的快速查看就会发现,你忘了你的控制器注入panelService
。