72 votes

Dans Angular, comment rediriger avec $ location.path en tant que $ http.post success callback

Je suis d'essayer de faire un simple service d'authentification par l'envoi d'un Poste à un fichier php, j'en ai besoin pour charger la page d'accueil partielle sur mon ng-view lors de son succès.

C'est ce que j'ai essayé :

function loginCtrl($scope, $http, $location){
    $http.post(url,data).success(function(data){
        $location.path('/home');
    });
}

Résultats dans mon url qui change, mais ng-view pas de mise à jour. il met à jour quand j'ai actualiser manuellement la page.

(les itinéraires ont été correctement configurés à l' $routeProvider, j'ai testé la redirection ce avec une fonction autonome, non pas comme un rappel, et il fonctionne )

J'ai aussi essayé de définir $location.path('/home') comme une fonction, puis en appelant sur le rappel ça ne fonctionne toujours pas.

J'ai fait quelques recherches et trouvé quelques articles faisant état de ce qui se passe lorsque l'on utilise un plug-in tiers, je ne suis qu'chargement angular.js

Des idées ou des pointeurs de certains matériaux d'étude sera grand

83voto

digger69 Points 2084

Voici l'exemple de changeLocation tiré de cet article http://www.yearofmoo.com/2012/10/more-angularjs-magic-to-supercharge-your-webapp.html#apply-digest-and-phase

 //be sure to inject $scope and $location
var changeLocation = function(url, forceReload) {
  $scope = $scope || angular.element(document).scope();
  if(forceReload || $scope.$$phase) {
    window.location = url;
  }
  else {
    //only use this if you want to replace the history stack
    //$location.path(url).replace();

    //this this if you want to change the URL and add it to the history stack
    $location.path(url);
    $scope.$apply();
  }
};
 

3voto

user2230867 Points 48

Je fais ce qui suit pour la redirection de page (de la connexion à la page d'accueil). Je dois également transmettre l'objet utilisateur à la page d'accueil. Donc, j'utilise Windows LocalStorage.

     $http({
        url:'/login/user',
        method : 'POST',
        headers: {
            'Content-Type': 'application/json'
          },
        data: userData
    }).success(function(loginDetails){
        $scope.updLoginDetails = loginDetails;
        if($scope.updLoginDetails.successful == true)
            {
                loginDetails.custId = $scope.updLoginDetails.customerDetails.cust_ID;
                loginDetails.userName = $scope.updLoginDetails.customerDetails.cust_NM;
                window.localStorage.setItem("loginDetails", JSON.stringify(loginDetails));
                $window.location='/login/homepage';
            }
        else
        alert('No access available.');

    }).error(function(err,status){
        alert('No access available.');      
    });
 

Et cela a fonctionné pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X