問題の流れを説明します...
- google.comを読み込みます(開始点として)
- 私はapp.comに行きました
- app.com/projectsに移動します
- app.com/api/testに移動します(window.location 経由)
- 生の JSON が表示されます (これまでのところ問題ありません...)
- URL はapp.com/projectsに変更されますが、まだ JSON が表示されます。
- もう一度押すと、URL がapp.comに変わりますが、まだ JSON が表示されます。
- もう一度押すと、google.comが読み込まれます。
- 私は前に進み、app.comは正常にロードされます...すべてが正常に戻ります
奇妙なことに、私がこれを観察したのhtml5Mode = true
は、Webkit の場合のみです。
. . .
まず、私のserver.coffeeは次のようになります。
app.get '/partials/:partial', routes.partials
app.get '/api/test', api.test
app.get '*', routes.index
基本的に、ビュー/部分ハンドラーと、生の JSON で応答するテスト API ルートを除いて、すべてのリクエストはインデックス (Angular をブートストラップします) を読み込みます。
. . .
(ネストされたビューと UI の状態を管理するためにui-router$urlRouterProvider
モジュールを使用しています。Angular の に非常によく似た を使用しています$routeProvider
)
次に、私のapp.coffeeは次のようになります。
app = angular.module('app', ['ui-router'])
.config([
'$stateProvider'
'$locationProvider'
'$urlRouterProvider'
($stateProvider, $locationProvider, $urlRouterProvider)->
$urlRouterProvider
.when('/api/test', [
'$window'
'$location'
($window, $location)->
$window.location.href = '/api/test'
])
.otherwise('/')
$stateProvider
.state 'home',
url: '/'
templateUrl: 'partials/index'
controller: 'IndexCtrl'
.state 'projects',
url: '/projects'
templateUrl: 'partials/projects'
controller: 'ProjectsCtrl'
$locationProvider.html5Mode(true).hashPrefix '!'
])
すべてが非同期であるため、サーバーがルートを処理できるように、$window
to accessを使用してページの更新をトリガーする必要がありました。window.location.href
私の質問はhtml5Mode
、戻るボタンを壊すことなく、ページの更新をトリガーするリンクを Angular のリンクと混在させることはできますか? これは単なる Webkit のバグですか、またはこれを行うためのより良い方法はありますか?
理想的には、Angular からアプリケーションを実行することですが、「about」ページや「contact」ページ (動的または非同期である必要はない) などは、定期的なページ更新を使用してサーバーから直接提供されます...
ヘルプ!