web-dev-qa-db-ja.com

AngularJS-全ページ読み込みでリダイレクトを行うにはどうすればよいですか?

ページが読み込まれたときにWebサーバーからのCookieが更新されるように、ページ全体を再読み込みするリダイレクトを行いたいです。 window.location = "/#/Next"およびwindow.location.href = "/#/Next"は機能しません。サーバーにヒットしないAngularルートを実行します。

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

92
Mike Pateras

<a>タグの場合

target="_self"タグに<a>を付ける必要があります

AngularJSが全ページのリロードを実行する場合は3つあります。

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

javascriptの使用:

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

見る:

180
jszobody

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

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

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

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

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

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

    (先頭に'/'もあります)。

  3. low-levelで新しいリンク先URLを割り当てます:$window.location.href = destinationUrl;

  4. 低レベルでの強制再ロード:$window.location.reload();

32
superjos

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

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

その後、リロード

$window.location.reload();
12
Daniyal

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

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

これを試して

$window.location.href="#page-name";
$window.location.reload();
0
Suresh Maurya