我有一项服务,我希望通过$http
获取数据(服务的原因是因为我需要在我的应用中多次拨打此电话)
该服务运行良好,这是代码:
factory('websiteService', function($rootScope, $http) {
this.getWebsites = function(){
http({
method: 'GET',
url: './data/websites.json'
}).then(function successCallback(response) {
return response.data;
});
}
$rootScope.websiteService = this;
return this;
});
然后,我在几个控制器中使用它,如下所示:
.controller('MyCtrl', function($scope, websiteService) {
$scope.websites = websiteService.getWebsites(); // not working
});
虽然,你猜这不起作用。似乎websites
在$http
请求结束之前定义,但我可能错了。
我该如何解决这个问题?
答案 0 :(得分:3)
以下是如何定义服务的:
myModule.factory('websiteService', function($http) {
function getWebsites() {
return $http({
method: 'GET',
url: './data/websites.json'
}).then(function successCallback(response) {
return response.data;
});
}
return {
getWebsites: getWebsites
};
});
以下是应该如何使用的:
myModule.controller('MyCtrl', function($scope, websiteService) {
websiteService.getWebsites().then(function(webSites) {
$scope.webSites = webSites;
});
});
我建议你阅读Traps, anti-patterns and tips about AngularJS promises以了解你对承诺所犯的错误。