Tengo un gran problema en mi aplicación angular js. Tengo un módulo de fábrica que tiene una función getAll (), esto obtiene los datos json del servidor. Y tengo el módulo del controlador donde trato de asignar el valor de la función getAll () de fábrica al ámbito.eventSports.

Mi problema es que, la asignación de variable se ejecuta primero, y no espera que la función getAll () regrese con los datos. La asignación de variable se ejecuta al principio con lo indefinido ... y luego obtengo el resultado de la función getAll ().

¿Cómo puedo lograr la variable asignar esperar la función getAll ()?

La fábrica:

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

La controladora:

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); 
1
Lacces 5 sep. 2014 a las 00:00

2 respuestas

La mejor respuesta

Cambiar esta línea

gameService.getGroupedEvents()

Para

return gameService.getGroupedEvents()
1
walts 4 sep. 2014 a las 20:18

Hay varias formas de implementar esta funcionalidad, como devolver el objeto diferido. Otro enfoque más simple es pasar $ scope para obtener la función getAll y vincular cualquier dato al $ scope aprobado.

0
ABOS 4 sep. 2014 a las 20:33