1. ホーム
  2. javascript

[解決済み] AngularJSで$windowまたは$locationを使用してリダイレクトする

2023-03-10 12:16:25

質問

私が取り組んでいるアプリは、様々な状態(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'に設定されており、これではうまくいきません。 これは、私が試したものの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"