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.
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"
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.
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>
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.