如何在AngularJS中为回调分配变量范围?

时间:2014-09-04 20:00:12

标签: javascript angularjs callback

我的角度js应用程序中存在很大问题。 我有一个工厂模块,它有一个getAll()函数,它从服务器获取json数据。 我有控制器模块,我尝试将工厂的getAll()函数值分配给scope.eventSports。

我的问题是,首先运行变量assign,并且它不等待getAll()函数返回数据。 变量assign首先运行未完成的...然后我得到getAll()函数的结果。

如何实现变量assign等待getAll()函数?

工厂:

var gameDataFactory = angular.module('gameDataFactory', []);

gameDataFactory.factory('gameDataFactory', ['gameService', function(gameService) {

    var sportEvents = {

        getAll : function(){
            gameService.getGroupedEvents()
            .success(function(data) {
                // Get the json data from the server.
                // This gives back the data, but later, this run at second time...
                console.log(data.sportEvents);
                return data.sportEvents;
            })
            .error(function(error) {
                return null;
            });
        }
    };

    return {
        sportEvents: sportEvents
    };
}]);

控制器:

gameControllers.controller('SportEventListCtrl', ['$scope', 'gameService', 'gameDataFactory', '$sce',
    function($scope, gameService, gameDataFactory, $sce) {
    $scope.sportEvents = {};

    $scope.status = true;

    // I should somehow assign this scope variable with callback
    $scope.sportEvents = gameDataFactory.sportEvents.getAll();
    // This run first and this is undefinied.
    console.log($scope.sportEvents); 

2 个答案:

答案 0 :(得分:1)

更改此行

gameService.getGroupedEvents()

return gameService.getGroupedEvents()

答案 1 :(得分:0)

有多种方法可以实现此功能,例如返回延迟对象。另一种更简单的方法是将$ scope传递给getAll函数,并将任何数据绑定到传递的$ scope。