web-dev-qa-db-fra.com

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

Je tente de faire un service d'authentification simple en envoyant une publication à un fichier php, j'ai besoin de lui pour charger la page d'accueil partielle sur mon ng-view lorsque sa réussite.

C'est ce que j'ai essayé:

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

Les résultats de mon url changent mais ng-view ne se met pas à jour. Il met à jour lorsque j'actualise manuellement la page.

(les routes ont été configurées correctement au $routeProvider, j'ai testé la redirection avec une fonction autonome et non comme un rappel et cela fonctionne)

J'ai également essayé de définir la fonction $location.path('/home') en tant que fonction, puis de l'appeler lors du rappel, cela ne fonctionne toujours pas.

J'ai fait des recherches et trouvé des articles indiquant que cela se produisait lors de l'utilisation d'un autre plugin tiers, je ne charge que angular.js

Toute idée ou indication sur du matériel d'étude sera formidable

71
George Ananda Eman

Voici l'exemple changeLocation 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();
  }
};
82
Mark Nadig

Il y a une réponse simple dans le guide officiel:

Que ne fait-il pas?

Cela ne provoque pas un rechargement complet de la page lorsque l'URL du navigateur est modifiée . Pour recharger la page après avoir modifié l'URL, utilisez l'API de niveau inférieur, $ window.location.href.

Source: https://docs.angularjs.org/guide/$location

14
0x6B6F77616C74

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.

3
user2230867

Au lieu d'utiliser success, je le change en then et cela fonctionne.

voici le code:

lgrg.controller('login', function($scope, $window, $http) {
    $scope.loginUser = {};

    $scope.submitForm = function() {
        $scope.errorInfo = null

        $http({
            method  : 'POST',
            url     : '/login',
            headers : {'Content-Type': 'application/json'}
            data: $scope.loginUser
        }).then(function(data) {
            if (!data.status) {
                $scope.errorInfo = data.info
            } else {
                //page jump
                $window.location.href = '/admin';
            }
        });
    };
});
2
jcguo

Utilisez: $ window.location.href = '/Home.html';

1
user2136053

c'est un code très facile .. mais difficile à trouver .. 

detailsApp.controller("SchoolCtrl", function ($scope, $location) { 
      $scope.addSchool = function () {

        location.href='/ManageSchool/TeacherProfile?ID=' + $scope.TeacherID;
      }
});
0
isanka thalagala