2016-03-27 10 views
0

Ich überprüfe mit jeder Anfrage, ob der Benutzer berechtigt ist. Das ist mein Werk:AngularJs zurückgestellt ist leer

(function() 
{ 
    angular.module('employeeApp').factory('authenticationFactory', authenticationFactory); 

    function authenticationFactory($cookieStore,$cookies,requestFactory,$location,GLOBALS,constants,$q) 
    { 
     var factory = {}; 

     factory.validateUser = function() 
     { 
      var vm = this; 
      vm.deferred = $q.defer(); 

      if($location.path() != '/') 
      { 
       var api_token = factory.getToken(); 

       factory.isValidToken(api_token).then(function(response) { 
        if (response.status != 200) { 
         $location.path('/'); 
        } 
        data = {"api_token": api_token}; 
        return requestFactory.post(GLOBALS.url + 'show/employee/' + $cookies.get('employeeid'), data) 
         .then(function (response) { 
          vm.deferred.resolve(response.data); 
          console.log(vm.deferred); 
          return vm.deferred.promise; 
         }, function(response) { 
          vm.deferred.reject(response); 
          return vm.deferred.promise; 
         }); 
       }); 
      } 
     } 
     return factory; 
    } 
})() 

Wenn ich vm.deferred console.log Ich sehe ein Objekt.

Aber wenn ich console.log(authenticationFactory.validateUser()); in meiner Datei sehe ich empty in meiner Konsole?

Auf der Suche nach Stunden jetzt bitte etwas Hilfe!

Antwort

0

In Ihrem ersten Beispiel missverstehen Sie, wie Angulars Dienst $http funktioniert. $http.post gibt ein Versprechen zurück, etwas, das irgendwann in der Zukunft aufgelöst werden wird. Wenn Sie einfach authenticationFactory.validateUser() anrufen, wie Sie es tun, geben Sie das ungelöste Versprechen zurück.

Es sieht aus wie Ihre authenticationFactory bereits return ein Versprechen Objekt ing, so dass es zu nennen, versuchen Sie es wie folgt tun:

function run(authenticationFactory) 
{ 
    authenticationFactory.validateUser().then(function(response) { 
     console.log(response); 
    }); 
} 

Werfen Sie einen Blick auf die docs for Angular's promise service für eine gute Vorstellung davon, wie das verwenden, Versprechen.

Auch sieht es mir aus Ihrem zweiten Beispiel wie Sie Missverständnis, wie Angulars Abhängigkeitsinjektion funktioniert.

In Ihrem zweiten Beispiel wird die authenticationFactory nie injiziert, so dass es nicht definiert ist.

Auch bedenken, dass während der config Phase eines Moduls kann nur providers injiziert werden, so dass Sie nicht in der Lage sein werden, die authenticationFactory in Ihrer config Funktion zu injizieren. (Es sei denn, Sie schreiben und dann ein authenticationFactoryProvider

injizieren ich Umschreiben des Codes von Ihrem zweiten Beispiel aussehen würde ähnlich wie diese arbeiten. Beachten Sie, dass ich die inline array dependency annotation bin mit, die nach den docs die bevorzugte Methode ist. Ihre Methode $inject würde explizit arbeiten, aber es ist einfacher, falsch zu gehen (und etwas weniger deutlich zu sehen, was injiziert hat wird)

Haftungsausschluss:.. ungetestet

(function() { 

var employeeAppModule = angular.module('employeeApp'); 

employeeAppModule.config([ 
    '$routeProvider', 
    function($routeProvider) { 
     $routeProvider.when('/', { 
      templateUrl: '../views/login.html', 
      controller: 'authenticationController', 
      controllerAs: 'authenticationCtrl' 
     }) 
     .when('/home', { 
      templateUrl: '../views/index.html', 
      controller: 'homeController', 
      controllerAs: 'homeCtrl' 
     }) 
     .when('/werknemer/:id', { 
      templateUrl: '../views/employee/employee.html', 
      controller: 'employeeController', 
      controllerAs: 'employeeCtrl' 
     }) 
     .otherwise({ 
      redirectTo: '/' 
     }); 
    } 
]); 

employeeAppModule.run([ 
    'authenticationFactory', 
    function(authenticationFactory) { 
     console.log(authenticationFactory.validateUser()); 
    } 
]); 
})(); 
+0

Vielen Dank für Ihre Zeit aber wie dies auch ist es nicht. Wenn ich in meiner Fabrik sage "test" zurückgeben, Die console.log in meinem routesfi le ist "test". So ist die Fabrik erreicht. Sehr sehr frustrierend -_-. – Jamie

+0

@jamie Ich habe meine Antwort bearbeitet. Probieren Sie es jetzt? – glcheetham

+0

ist es immer noch undefiniert. Es sieht so aus, als ob die Antwort nach dem console.log empfangen werden könnte. – Jamie

Verwandte Themen