経由で AngularJS で html5Mode を有効にする$locationProvider.html5Mode(true)
と、サイトのより深いページに移動すると、ナビゲーションが歪んでいるように見えます。
例えば:
http://www.site.com
ルートに移動すると、サイト内のすべてのリンクをクリックできます。Angular がサイト内の$routeProvider
移動と正しいビューの読み込みを引き継ぎます。http://www.site.com/news/archive
しかし、この URL に移動すると (または、上記のようなディープリンクを使用しているときに [更新] をクリックすると)、このナビゲーションが期待どおりに機能しません。まず、$locationProvider.html5Mode のドキュメントで指定されているように、Angular のルートと同様に、サーバー上のすべての URL をキャッチしotherwise
、ルート ドメインと同じ html を返します。しかし、angular$location
の関数内からオブジェクトをチェックすると、それが my であり、それが myであることがわかります。私は有効なルートとしてしか持っていないので、句に到着します。アプリは奇妙なことをします。run
http://www.site.com
host
/archive
path
$routeProvider
.otherwise()
/news/archive
サーバーでの書き換えを別の方法で行う必要があるか、角度で指定する必要があるかもしれませんが、現在、角度が/news
セグメントを含まないパスを参照する理由についてはわかりません。
例 main.js:
// Create an application module
var App = angular.module('App', []);
App.config(['$routeProvider', '$locationProvider', function AppConfig($routeProvider, $locationProvider) {
$routeProvider
.when(
'/', {
redirectTo: '/home'
})
.when('/home', {
templateUrl: 'templates/home.html'
})
.when('/login', {
templateUrl: 'templates/login.html'
})
.when('/news', {
templateUrl: 'templates/news.html'
})
.when('/news/archive', {
templateUrl: 'templates/newsarchive.html'
})
// removed other routes ... *snip
.otherwise({
redirectTo: '/home'
}
);
// enable html5Mode for pushstate ('#'-less URLs)
$locationProvider.html5Mode(true);
$locationProvider.hashPrefix('!');
}]);
// Initialize the application
App.run(['$location', function AppRun($location) {
debugger; // -->> here i debug the $location object to see what angular see's as URL
}]);
要求に従って編集
します。サーバー側の詳細: サーバー側は zend フレームワークのルーティングによって編成され、独自のルートを処理します (特定の/api
URL でフロントエンドにデータを提供するため、最後にキャッチがあります)。 -all route 特定の他のルートがバインドされていない場合、root-route と同じ html を提供するため、基本的にはそのディープリンク ルートでホームページ html を提供します。
Update 2 で問題を調査した結果、Angular 1.0.7 安定版ではこのルーティングがそのまま正常に機能することに気付きましたが、Angular 1.1.5 不安定版では上記の動作が見られます。
変更ログを確認しましたが、これまでのところ有用なものは見つかりませんでした。バグとして提出するか、彼らが行った特定の変更に関連する望ましくない動作を提出するか、ただ待って修正されるかどうかを確認してください。後で安定版がリリースされます。