Die App, an der ich arbeite, enthält verschiedene Status (mit dem UI-Router). In einigen Status müssen Sie angemeldet sein, andere sind öffentlich verfügbar.
Ich habe eine Methode erstellt, die überprüft, ob ein Benutzer angemeldet ist. Bei Problemen wird bei Bedarf auf unsere Anmeldeseite umgeleitet. Es ist zu beachten, dass die Anmeldeseite derzeit nicht in der AngularJS-App platziert ist.
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");
}
});
});
Das console.log zeigt die beabsichtigte URL korrekt an. Die Zeile danach habe ich praktisch alles ausprobiert von $ window.open bis window.location.href und egal was ich ausprobiert habe passiert keine Umleitung.
BEARBEITEN (BEHOBEN):
Habe das Problem gefunden.
var landingUrl = $window.location.Host + "/login";
$window.open(landingUrl, "_self");
Die Variable landingUrl wurde auf 'domain.com/login' gesetzt, was mit $ window.location.href (was eines der Dinge war, die ich ausprobiert habe) nicht funktioniert. Allerdings nach dem Ändern des Codes auf
var landingUrl = "http://" + $window.location.Host + "/login";
$window.location.href = landingUrl;
es funktioniert jetzt.
Ich glaube, der Weg, dies zu tun, ist $location.url('/RouteTo/Login');
Zur Verdeutlichung bearbeiten
Angenommen, meine Route für meine Anmeldeansicht war /Login
, Dann würde ich $location.url('/Login')
sagen, um zu dieser Route zu navigieren.
Für Standorte außerhalb der Angular App (d. H. Keine Route definiert) wird einfaches altes JavaScript bereitgestellt:
window.location = "http://www.my-domain.com/login"
Es scheint, dass für die ganze Seite nachladen $window.location.href
ist der bevorzugte Weg.
Es wird keine vollständige Seite neu geladen, wenn die Browser-URL geändert wird. Verwenden Sie die untergeordnete API $ window.location.href, um die Seite nach dem Ändern der URL erneut zu laden.
Es könnte dir helfen! Demo
AngularJs Code-Beispiel
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;
};
});
HTML Code-Beispiel
<div ng-app="urlApp">
<div ng-controller="urlCtrl">
Redirect to <a href="#" ng-click="ClickMeToRedirect()">Click Me!</a>
</div>
</div>
Ich bin mir nicht sicher, ab welcher Version, aber ich verwende 1.3.14 und Sie können einfach Folgendes verwenden:
window.location.href = '/employee/1';
Keine Notwendigkeit zu spritzen $location
oder $window
im Controller und es ist nicht erforderlich, die aktuelle Host-Adresse abzurufen.