AngularJS:服务不将变量返回给控制器

时间:2014-06-30 17:29:48

标签: javascript angularjs angularjs-service

我的应用程序有一个服务,它应该返回一个对象数组(来自twitter api的推文),如下所示:

.service('twitterService', function($http) {
    this.getTweets = function(){
        $http.get('http://example.com/?json=get_twitter_sidebar').success(
            function(data, status, headers, config) {
                if (data.status == 'ok') {
                    return data.feed;
                } else {
                    return 'Error Retrieving Feed'
                }
            });
    }

})

这项服务似乎有效;它调用api并返回所需的对象数组(我使用console.log进行验证)。但是,我似乎无法将返回的数组传递给我的控制器:

var TopPageCtrl = function($scope, $window, $http, twitterService) {
    $scope.feed = twitterService.getTweets();
};

当我使用console.log($ scope.feed)时,它返回undefined。我已经尝试了一百万种方法,但似乎没有任何效果。我做错了什么?

3 个答案:

答案 0 :(得分:2)

返回承诺

.service('twitterService', function($http) {
this.getTweets = function(){
    var p = $http.get('http://example.com/?json=get_twitter_sidebar').success(
        function(data, status, headers, config) {
            if (data.status == 'ok') {
                return data.feed;
            } else {
                return 'Error Retrieving Feed';
            }
        });
     return p;
}});


var TopPageCtrl = function($scope, $window, $http, twitterService) {
twitterService.getTweets().then(function (response) {
  $scope.feed = response;
};};

答案 1 :(得分:1)

也许它还没有回复需要解决的承诺?尝试类似......

var getFeed = twitterService.getTweets();
getFeed.then(function (feed) {
    $scope.feed = feed;
});

答案 2 :(得分:1)

$ scope.feed = twitterService.getTweets();

this.getTweets = function(){
            $http.get('http://example.com/?json=get_twitter_sidebar').success(
                function(data, status, headers, config) {
                    if (data.status == 'ok') {
                        return data.feed;
                    } else {
                        return 'Error Retrieving Feed'
                    }
                });
        }

你的功能没有返回任何东西,这就是你得到“未定义”的原因.. 试试这个:

this.getTweets = function(){
                return $http.get('http://example.com/?json=get_twitter_sidebar').success(
                    function(data, status, headers, config) {
                        if (data.status == 'ok') {
                            return data.feed;
                        } else {
                            return 'Error Retrieving Feed'
                        }
                    });
            }

twitterService.getTweets().then(function (response){...});