我會通過有問題的流程走...如何將觸發頁面刷新的鏈接與Angular的html5Mode = true混合,而不會打破後退按鈕?
- 我加載google.com(只是作爲一個起點)
- 我轉到app.com
- 我資產淨值對app.com/projects
- 我NAV到app.com/api/test(通過window.location的)
- 我看到原始的JSON(好爲止......)
- 我壓回,網址更改爲app.com/projects,但我還是看到了JSON。
- 我按下回來,網址更改爲app.com,但我還是看到了JSON。
- 我再次按下,google.com負荷。
- 我奮力向前,app.com加載罰款......一切恢復正常
什麼奇怪的,是我觀察到這隻有當html5Mode = true
在Webkit- Firefox的工作方式所需 .. 。
。 。 。
首先,我的server.coffee看起來像這樣:
app.get '/partials/:partial', routes.partials
app.get '/api/test', api.test
app.get '*', routes.index
基本上,所有請求加載索引(其自舉角),與例外爲視圖/部分處理程序,一個測試API路線用原始的JSON響應。
。 。 。
(我使用的是ui-router模塊用於管理嵌套視圖和UI狀態;它使用$urlRouterProvider
,這非常類似於角的$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
訪問window.location.href
來觸發頁面刷新,以便服務器處理路由。
所以我的問題,我可以混合觸發頁面角的html5Mode
沒有打破後退按鈕刷新鏈接?這只是一個Webkit的bug,和/或有更好的方法來做到這一點?
理想情況下,我會讓應用程序運行Angular--但諸如「about」或「contact」頁面(不需要是動態或異步)的東西將直接從服務器使用常規頁面刷新...
幫助!
現在,我找到了答案,我發現了一個重複的問題:http://stackoverflow.com/questions/11580004/angular-js-link-behaviour-disable-deep-linking-for-specific-urls – jlmakes 2013-05-03 13:58:56