2017-04-17 1 views
0

J'ai un contrôleur qui étend un autre contrôleur:méthode contrôleur ne retourne pas de valeur pour étendre le contrôleur

je dois recevoir le résultat de la deuxième méthode de commande à une première variable du contrôleur

premier contrôleur:

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 contrôleur:

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




}); 

Les appels http reçoivent des données ¿Le problème peut être causé par des appels HTTP asynchrones?

Répondre

0

Résolu à l'aide de mes callbacks: p

premier contrôleur:

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

Méthode de deuxième contrôleur (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"); 
    }); 
}; 
+0

Certaines personnes considèrent que la création d'un emballage à base de rappel autour d'une API basée sur la promesse d'être anti-pattern. Voir [Pourquoi les rappels de la promesse '.then' Méthodes un anti-pattern] (http://stackoverflow.com/questions/35660881/why-are-callbacks-from-promise-then-methods-an-anti-pattern) . – georgeawg