2015-05-06 10 views
5

W tej chwili mam ustawioną Auth Factory do uruchomienia, gdy moje państwo przejdzie na cloud. Próbuję przekazać :cloud_id do tej funkcji authCheck(), ale nie wiem jak.Angularjs Przekazywanie zmiennej za pomocą funkcji rozstrzygnięcia

Czy ktoś może wskazać mi w dobrym kierunku, aby to zmienić:

resolve: { authenticated: authenticated } 

Aby coś takiego:

resolve: { authenticated: authenticated(cloud_id) } 

Oto mój kod:

.factory('Auth', function($http, $state, $q) { 

    var factory = { authCheck: authCheck }; 
    return factory; 

    function authCheck(cloud_id) { 
     return $http.post('/auth/check', {id:cloud_id}); 
    } 

}) 
.config(function($stateProvider, $urlRouterProvider, $locationProvider) { 

    $locationProvider.html5Mode(true); 
    $urlRouterProvider.otherwise('/cloud'); 

    var authenticated = ['$q', 'Auth', '$rootScope', function ($q, Auth, $rootScope) { 
     var deferred = $q.defer(); 
     Auth.authCheck(cloud_id).then(function(){ deferred.resolve(); }, function(){ deferred.reject(); }); 
     return deferred.promise; 
    }]; 

    $stateProvider 

     .state('cloud', { 
      url: '/cloud/:cloud_id', 
      templateUrl: 'pages/templates/cloud.html', 
      controller: 'cloud', 
      resolve: { authenticated: authenticated } 
     }) 

}) 
+1

Możesz wstawić $ route w swojej funkcji resolve i pobrać paramy: http://stackoverflow.com/a/13433335/373655 – rob

+0

Dzięki @rob, ostatni komentarz na temat 'ui-router' i' $ StateParams' bardzo pomogły – bryan

Odpowiedz

3

Ty może wstrzyknąć i użyć $stateParams w następujący sposób:

var authenticated = ['$q', 'Auth', '$rootScope', '$stateParams', function ($q, Auth, $rootScope, $stateParams) { 
    var deferred = $q.defer(); 
    Auth.authCheck($stateParams.cloud_id).then(function(){ deferred.resolve(); }, function(){ deferred.reject(); }); 
    return deferred.promise; 
}]; 

Zobacz this plnkr.

+0

Awesome !! Dzięki Reto – bryan

+0

Nie ma za co. –