9

ルートの場所にない AngularJS アプリを構築していますdomain.tld/blog/blogベース上のすべてのルーティング設定を行いました。ページの head に base タグを含めました<base href="/blog">html5Modeに設定されていtrueます。アプリ内では、すべてが期待どおりに機能します。ただし、ベースの場所の外にある角度のない URL をクリックすると、ページが読み込まれません。この場所はotherwise、ルーターの関数によってキャッチされているようです。

ROUTER.otherwise({
  redirectTo : '/blog'
});

したがって、任意の URL をクリックすると、つまりdomain.tld/somewhere-elsedomain.tld/blog にリダイレクトされます。当然のことですが、ルーターで見つからないすべての URL を「ホームページ」にリダイレクトします。私のアプリでは、これは望ましい動作ではありません。ルーターにないすべての URL は、通常の URL として扱われ、その URL へのページのリロードが発生する必要があります。

だから私が必要とするのは次のようなものです:

ROUTER.otherwise(
     window.location = theRequestedUrl;
);

これは明らかに機能しません。しかし、どういうわけか、ルーターのその他の部分に入り、ページのリロードでページにリダイレクトするように指示する必要があります。

次の質問が関連しています:角度のあるルーティングで奇妙なことが起こっています

次の jsFiddle は問題を示しています (@rdjs に感謝します!) http://fiddle.jshell.net/43tub/6/show/light/。リンクをクリックすると、/outsideページ全体が更新されます...

4

4 に答える 4

9

Angularのドキュメントによると

次のような場合、リンクは書き換えられません。代わりに、ブラウザは元のリンクへのページ全体のリロードを実行します。

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

これが役立つかどうかを確認してください

于 2013-08-05T13:15:22.040 に答える
5

コードを見ると、ベースが「/blog」ではなく「/blog/」であることが重要に見えます。リンクを相対的に参照できるように変更すると、次のようになります。

  <a href="./Book/Moby">Moby</a> |
  <a href="./Book/Gatsby">Gatsby</a> |
  <a href=".">base root</a> |
  <a href="/Outside">Outside</a> |  // gets a nice 404

私のjsfiddle、location.pathname は常に "[path]/" を設定していることに注意してください。これは、編集中にハードコードされた /_display/ も機能しますが、jsfiddle は、編集および保存フィドルを実行するときに _display/ と workingdir/show/ を切り替えます。

于 2013-08-09T12:14:35.910 に答える
2

次のようなこともできます。

var redirect = function(skip, url) {
    console.log("Redirecting to ", url);
    window.location.href = url
};
$routeProvider
    .when('/inside-router', { templateUrl: 'something.html' })
    .when('/get-me-away.html', { redirectTo: redirect })
    .when('/static/:file', { redirectTo: redirect })

これは、実際の例を含む JSFiddleです。

基本的に、AngularJS がredirectToプロパティで指定された関数を呼び出し、関数が文字列を返さない場合はそれ以上何もしないことを悪用しています。

于 2013-11-12T19:05:30.730 に答える
0

それが役に立てば幸い:

$routeProvider
.when('...', {})
.otherwise({
  redirectTo: function () {
    window.location = location.pathname;
}});

使用:
1.3.10/angular.js
1.3.10/angular-route.js

于 2015-01-22T15:01:33.843 に答える