我将介绍有问题的流程......
奇怪的是,只有当Webkit- firefox中的html5Mode = true
按需运行时,我才会注意到这一点 ......
。 。
首先,我的 server.coffee 如下所示:
app.get '/partials/:partial', routes.partials
app.get '/api/test', api.test
app.get '*', routes.index
基本上,所有请求都加载索引(引导Angular),视图/部分处理程序除外,以及使用原始JSON响应的测试api路由。
。 。
(我正在使用ui-router模块来管理嵌套视图和UI状态;它使用$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
访问window.location.href
来触发页面刷新,以便服务器处理路由。
所以我的问题是,我可以将触发页面刷新的链接与Angular的html5Mode
混合而不会破坏后退按钮吗?这只是一个Webkit错误,和/或有更好的方法吗?
理想情况下,我让应用程序在Angular上运行 - 但是“about”或“contact”页面(不需要动态或异步)之类的东西将直接从服务器使用常规页面刷新提供...
帮助!
答案 0 :(得分:18)
两个选项:
<a />
代码,请指定target="_self"
让AngularJS知道它不应捕获其点击(这些链接将由浏览器正常处理)。这不是一个黑客;这是正常记录的行为。$window.location = 'foo'
。这是可以接受的。