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

AngularJS : Service not Returning Variables to Controllers

本文关键字:控制器 返回 变量 服务 AngularJS      更新时间:2023-09-26

我的应用程序有一个服务,它应该返回一个对象数组(来自twitter api的tweet),看起来像:

.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我试过无数种方法,但似乎都不管用。我做错了什么?

返回承诺

.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;
};};

也许它返回一个需要解决的承诺?试试…

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

$scope。

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'
                    }
                });
        }

你的函数没有返回任何东西,这就是为什么你得到"undefined"..试试这个:

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){...});