Question

Dans mon application AngularJS, à chaque demande de changement de page que je lance :

    $rootScope.$on('$locationChangeStart', function (event, next, current) {
        var user;
        $http.get('/api/Authentication/UserAuthenticated').then(function (data) {
        console.log("call");
         user = data.data;
       });   
      console.log("end of call");
    });

Lorsque j'exécute l'application et teste ce qui se passe, je vois dans la console que la "fin d'appel" est renvoyée avant console.log("call"); ce qui signifie que l'utilisateur n'est pas défini.Ce qui signifie que si je veux vérifier si l'utilisateur est connecté lors du changement d'itinéraire, l'utilisateur ne sera pas défini.

Comment puis-je effectuer une requête Angular run -> http et ensuite seulement continuer ?

Était-ce utile?

La solution

J'ai un peu mal compris la question.Vous pouvez laisser le $routeProvider résoudre le $http promesse:

var app = angular.module("myApp");

app.config(["$routeProvider", function($routeProvider) {
  $routeProvider.when("/",{
    templateUrl: "myTemplate.html",
    controller: "MyCtrl",
    resolve: {
      user: ["$http", "$q", function($http, $q) {
        var deferred = $q.defer();
        $http.get('/api/Authentication/UserAuthenticated').success(function(data){
           deferred.resolve(data.data);
        }).error(function(error) {
           deferred.resolve(false);
        });
        return deferred.promise;
      }]
    }
  });
}]);

Si le code permettant de récupérer les données utilisateur est trop complexe, vous pouvez créer un service pour celui-ci et injecter ce service dans le $routeProviderc'est resolve fonction.

Dans votre contrôleur, vous injectez simplement la promesse (qui sera résolue) :

app.controller("MyCtrl",["$scope","user", function($scope, user) {
   if (!user) {
      alert("User not found");
   }
...
}]);

Autres conseils

utiliser async:false.Ça marche pour moi

Essayez ce code, au lieu de votre code

$rootScope.$on('$locationChangeStart', function (event, next, current) {
$http({method: 'GET',
            url: '/api/Authentication/UserAuthenticated',                
            async: false
              }).success(function (data) {
            console.log("call");
            user = data.data;
             }
         console.log("end of call");   
 });
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top