web-dev-qa-db-fra.com

Utiliser $ window ou $ location pour rediriger dans AngularJS

L'application sur laquelle je travaille contient plusieurs états (en utilisant ui-router), certains états exigent que vous soyez connecté, d'autres sont accessibles au public.

J'ai créé une méthode qui vérifie valablement si un utilisateur est connecté. Ce qui me pose problème actuellement, c'est la redirection vers notre page de connexion lorsque cela est nécessaire. Il convient de noter que la page de connexion n'est pas actuellement placée dans l'application AngularJS.

app.run(function ($rootScope, $location, $window) {


    $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {

        if (toState.data.loginReq && !$rootScope.me.loggedIn) {
            var landingUrl = $window.location.Host + "/login";
            console.log(landingUrl);
            $window.open(landingUrl, "_self");
        }
    });
});

Le fichier console.log affiche correctement l’URL prévue. La ligne suivante, j’ai essayé pratiquement tout, de $ window.open à window.location.href et quoi que j’ai essayé, aucune redirection n’arrive.

EDIT (RÉSOLU):

Trouvé le problème.

var landingUrl = $window.location.Host + "/login";
$window.open(landingUrl, "_self");

La variable landingUrl a été définie sur 'domain.com/login', ce qui ne fonctionnerait pas avec $ window.location.href (ce qui est l'une des choses que j'ai essayée). Cependant, après avoir changé le code en

var landingUrl = "http://" + $window.location.Host + "/login";
$window.location.href = landingUrl;

cela fonctionne maintenant.

88

Je pense que la façon de faire est $location.url('/RouteTo/Login');

Edit for Clarity

Dites que mon itinéraire pour la vue de connexion était /Login, je dirais $location.url('/Login') pour accéder à cet itinéraire.

Pour les emplacements en dehors de l'application Angular (c'est-à-dire, aucun itinéraire défini), l'ancien code JavaScript pur servira:

window.location = "http://www.my-domain.com/login"
76
m.casey

Il semble que pour le rechargement complet de la page $window.location.href soit la méthode préférée.

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.

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

35
Diego Ferri

Cela pourrait vous aider! démo

Échantillon de code AngularJs

var app = angular.module('urlApp', []);
app.controller('urlCtrl', function ($scope, $log, $window) {
    $scope.ClickMeToRedirect = function () {
        var url = "http://" + $window.location.Host + "/Account/Login";
        $log.log(url);
        $window.location.href = url;
    };
});

Exemple de code HTML

<div ng-app="urlApp">
    <div ng-controller="urlCtrl">
        Redirect to <a href="#" ng-click="ClickMeToRedirect()">Click Me!</a>
    </div>
</div>
19
Anil Singh

Pas sûr de quelle version, mais j'utilise 1.3.14 et vous pouvez simplement utiliser:

window.location.href = '/employee/1';

Pas besoin d'injecter $location ou $window dans le contrôleur et pas besoin d'obtenir l'adresse actuelle de l'hôte.

4
CularBytes