webentwicklung-frage-antwort-db.com.de

Verwenden von $ window oder $ location zum Umleiten in AngularJS

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"
76
m.casey

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.

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

35
Diego Ferri

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>
19
Anil Singh

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.

4
CularBytes