web-dev-qa-db-ja.com

AngularJSで$ windowまたは$ locationを使用してリダイレクトをする

私が取り組んでいるアプリにはさまざまな状態が含まれています(ui-routerを使用)。ある状態ではログインする必要があり、他の状態では公に利用可能です。

ユーザーがログインしているかどうかを正しくチェックするメソッドを作成しました。現在問題になっているのは、必要に応じてログインページにリダイレクトすることです。ログインページは現在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");
        }
    });
});

Console.logは意図したURLを正しく表示します。その後の行で、私は$ window.openからwindow.location.hrefまで事実上すべてを試みました、そして何をリダイレクトしようと試みたとしても関係ありません。

編集(解決済み):

問題を見つけました。

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

変数landingUrlは 'domain.com/login'に設定されていて、これは$ window.location.href(これは私が試したものの1つです)では機能しません。しかし、コードをに変更した後

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

それは今うまくいきます。

その方法は$location.url('/RouteTo/Login');だと思います

わかりやすくするために編集

自分のログインビューのルートが/Loginだとしたら、そのルートに移動するには$location.url('/Login')とします。

Angularアプリ以外の場所(ルートが定義されていないなど)では、普通のJavaScriptが役立ちます。

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

全ページのリロードには$window.location.hrefが好ましい方法のようです。

ブラウザのURLが変更されても、ページ全体が再読み込みされることはありません。 URLを変更した後にページをリロードするには、下位レベルのAPI $ window.location.hrefを使用します。

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

34
Diego Ferri

それはあなたを助けるかもしれません! デモ

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;
    };
});

HTMLコードサンプル

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

どのバージョンからかわからないが、私は1.3.14を使用し、あなたはただ使用することができます:

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

コントローラに$location$windowを挿入する必要も、現在のホストアドレスを取得する必要もありません。

4
CularBytes