AngularJS-全ページをロードしてリダイレクトするにはどうすればよいですか?


94

ページ全体の再読み込みを行うリダイレクトを実行して、ページが読み込まれたときにWebサーバーからのCookieが更新されるようにしたい。window.location = "/#/Next"そして、window.location.href = "/#/Next"動作しない、彼らはサーバーに当たらない角度のルートを行います。

Angularコントローラー内で完全なサーバーリクエストを行う正しい方法は何ですか?


8
これを解決したことがありますか?
superjos 2013年

7
これを解決したことがありますか?
Nolwennig

6
これを解決したことがありますか?
Dan Beaulieu

5
これを解決したことがありますか?
私のスタックが

4
これを解決したことがありますか?
shahzain ali 2017

回答:


183

<a>のタグ

あなたtarget="_self"はあなたの<a>タグに固執する必要があります

AngularJSがページ全体の再読み込みを実行する3つのケースがあります。

  • ターゲット要素を含むリンク
    例:<a href="https://stackoverflow.com/ext/link?a=b" target="_self">link</a>
  • 別のドメインに移動する絶対リンク
    例:<a href="http://angularjs.org/">link</a>
  • ベースが定義されているときに異なるベースパスにつながる「/」で始まるリンク
    例:<a href="https://stackoverflow.com/not-my-base/link">link</a>

JavaScriptの使用

この$locationサービスでは、URLのみを変更できます。ページをリロードすることはできません。URLを変更してページを再読み込みするか、別のページに移動する必要がある場合は、下位レベルのAPIを使用してください$window.location.href

見る:


15
$ window.location.hrefはwindow.location.hrefと同じことを行います。$ windowは単にwindowのラッピングサービスだと思います。どちらの方法でも、ページ全体を更新するのではなく、Angularルートを実行します。
Mike Pateras 2013

3
$ window.location.hrefは間違いなくページ全体の更新を引き起こします。アプリで実行しています。
jszobody 2013

3
同じことを読んだ。現在のバージョンのChromeでは機能しません。Angularルートを実行します。
Mike Pateras 2013

1
CDNから1.0.6。これは$ http.post成功コールバック内で行います。問題があれば、コールバックの外で試して同じ結果を得ました。"/"(Angularルートも定義されています)へのリダイレクトを行うと、ページ全体の更新で機能しますが、 "/#/ Next"はビューの変更のみを行います。
Mike Pateras 2013

5
<a href="..." target="_self">私のために働いたものです ありがとう!
Michael

33

JSコードから(つまりHTMLアンカーからではなく)動作する同じ問題がありました。これが私たちがそれを解決した方法です:

  1. 必要に応じて、サービスを通じて現在のURLを仮想的に変更し$locationます。これは、宛先が現在のURLの単なるバリエーションである場合に役立ち、$locationヘルパーメソッドを利用できます。たとえば$location.search(..., ...)、クエリ文字列パラメーターの値を変更するために実行しました。

  2. $location.url()必要に応じて現在のURLを使用して、新しいリンク先URLを作成します。機能するために、この新しいものはスキーマ、ドメイン、ポートの後にすべてを含める必要がありました。したがって、たとえば次の場所に移動したい場合は、

    http://yourdomain.com/YourAppFolder/YourAngularApp/#/YourArea/YourAction?culture=en

    次に、次のようにURLを設定する必要があります。

    var destinationUrl = '/YourAppFolder/YourAngularApp/#/YourArea/YourAction?culture=en';

    (先頭'/'にも)。

  3. 低レベルで新しいリンク先URLを割り当てます$window.location.href = destinationUrl;

  4. 強制的にリロードします。低レベルのままです。 $window.location.reload();


1
Chrome 38を使用したAngular 1.3.1では、これは機能しません。パスまたは完全なURLを割り当てても、$ window.location.hrefの値は変わりません。$ window.location.assign()のみが機能しました。
FelixM 2014年

フェリックスと同じ問題を抱えて、別の方法の中でそれを解決stackoverflow.com/questions/31137809/...
Soroush Hakami

13

ヒットとトライアルセッションを検索して与えた後、私は最初にURLを次のように指定することでそれを愛することができます

$window.location.href = '/#/home/stats';

次にリロード

$window.location.reload();

これで問題は解決したようですが、ブラウザで前後にクリックすると、多くの不整合が発生します。
luisluix 2017

9

同じ問題がありました。私が使用している場合window.location$window.locationあるいは<a href="..." target="_self">ルートは、ページを更新しません。したがって、キャッシュされたサービスが使用されますが、これは私のアプリでは必要ありません。ルーティング後にページを強制的に再読み込みするようにwindow.location.reload()after window.locationを追加することで解決しました。ただし、このメソッドはページを2回ロードするようです。汚いトリックかもしれませんが、それは仕事をします。これが私が今持っている方法です:

  $scope.openPage = function (pageName) {
      window.location = '#/html/pages/' + pageName;
      window.location.reload();
  };

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.