Search code examples
angularjsajaxcontrollers

Controller method doesn't return value to extend controller


I have a controller who extend another controller:

I need to recieve the result of the second controller's method to a first controller's variable

First Controller:

angular.module('Gestios').controller('EmpresasControllerList', function($scope, $controller ) {
    angular.extend(this, $controller('AppController', {
        $scope: $scope
    }));

    $scope.App = $scope.runApp('empresas', true);

    console.log($scope.App);
});

Second Controller:

app.controller('AppController', function ($scope, $controller, AppFactory) {
    $scope.runApp = function (AppPermalink, GetResults, Filters, Callback) {
        if(!angular.isDefined(Filters)){Filters = $scope.Filters;}

        var App = {
            Load : {
                busy: false,
                page: 1
            },
            Info: {},
            Results: []
        };

        AppFactory.Applications(AppPermalink).then(function (data) {
            App.Info = data.data[0];

            if(GetResults){
                AppFactory.Items(AppPermalink, Filters).then(function (data) {
                    App.Results = {
                        list: data.data.data,
                        count: data.data.total
                    };

                    if(typeof(Callback) == "function"){Callback(true, {results: App.Results.list, count: App.Results.count});}

                    return App;
                },function () {
                    App.Results = {
                        list: [],
                        count: 0
                    };

                    if(typeof(Callback) == "function"){Callback(false, {results: App.Results.list, count: App.Results.count});}

                    return App;
                });
            }
        },function (error) {
            swal("Algo ha ido mal", error.error, "error");
        });
    };
});




});

The http calls recieve data ¿Problem may be caused by asynchronous http calls?


Solution

  • Solved it using my callbacks :p

    First Controller:

    angular.module('Gestios').controller('EmpresasControllerList', function($scope, $controller ) {
        angular.extend(this, $controller('AppController', {
            $scope: $scope
        }));
    
        $scope.runApp('empresas', true, false, function(Result, App){
            if(Result){
                $scope.App = App;
            }
        });
    });
    

    Method of second Controller (AppController):

    $scope.runApp = function (AppPermalink, GetResults, Filters, Callback) {
        if(!angular.isDefined(Filters)){Filters = $scope.Filters;}
    
        var App = {
            Load : {
                busy: false,
                page: 1
            },
            Info: {},
            Results: []
        };
    
        AppFactory.Applications(AppPermalink).then(function (data) {
            App.Info = data.data[0];
    
            if(GetResults){
                AppFactory.Items(AppPermalink, Filters).then(function (data) {
                    App.Results = {
                        list: data.data.data,
                        count: data.data.total
                    };
    
                    if(typeof(Callback) == "function"){Callback(true, App);}
                },function () {
                    App.Results = {
                        list: [],
                        count: 0
                    };
    
                    if(typeof(Callback) == "function"){Callback(false, App);}
                });
            }
        },function (error) {
            swal("Algo ha ido mal", error.error, "error");
        });
    };