Angularがtempaltes内のアンカータグのhref属性に表示されるURLを書き換えて、html5モードでもハッシュバングモードでも機能するように見えました。位置情報サービスのドキュメントには、 HTMLリンクの書き換えによってハッシュバングの状況が処理されると記載されているようです。したがって、HTML5モードでない場合はハッシュが挿入され、HTML5モードの場合は挿入されないことを期待します。
ただし、書き換えは行われていないようです。次の例では、モードを変更することはできません。アプリケーションのすべてのリンクは手動で書き換える必要があります(または実行時に変数から派生させる必要があります。モードに応じてすべてのURLを手動で書き換える必要がありますか?
Angular 1.0.6、1.1.4、1.1.3でクライアント側のURLの書き換えが行われていないようです。すべてのhref値の先頭に、ハッシュバングモードの場合は#/、html5モードの場合は/を付ける必要があるようです。
書き換えを発生させるために必要な設定はありますか?ドキュメントを読み違えていますか?他にばかげたことをしていますか?
ここに小さな例があります:
<head>
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.3/angular.js"></script>
</head>
<body>
<div ng-view></div>
<script>
angular.module('sample', [])
.config(
['$routeProvider', '$locationProvider',
function ($routeProvider, $locationProvider) {
//commenting out this line (switching to hashbang mode) breaks the app
//-- unless # is added to the templates
$locationProvider.html5Mode(true);
$routeProvider.when('/', {
template: 'this is home. go to <a href="https://stackoverflow.com/about"/>about</a>'
});
$routeProvider.when('/about', {
template: 'this is about. go to <a href="https://stackoverflow.com/"/>home</a'
});
}
])
.run();
</script>
</body>
補遺:私の質問を再読する際に、誰がいつ書き換えをやりたかったかについて明確に明記せずに「書き換え」という用語を使用したことがわかりました。問題は、AngularがパスをレンダリングするときにURLを書き換える方法と、2つのモード間でJSコードのパスを均一に解釈する方法についてです。WebサーバーにHTML5互換の要求の書き換えを行わせる方法についてではありません。