Angular - $ scope无法在服务中访问$ http响应

时间:2016-06-04 16:33:00

标签: angularjs http service request

我有一项服务,我希望通过$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请求结束之前定义,但我可能错了。

我该如何解决这个问题?

1 个答案:

答案 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以了解你对承诺所犯的错误。