当通过启用AngularJS中的html5Mode时$locationProvider.html5Mode(true)
,当您进入站点更深的页面时,导航似乎偏斜。
例如:
http://www.site.com
当我导航到根目录时,我可以单击站点中的所有链接,Angular$routeProvider
会接管整个站点的导航并加载正确的视图。http://www.site.com/news/archive
但是,当我导航到该URL时(或者当我进入上述类似的深层链接时点击刷新...),该导航无法正常工作。首先,按照$ locationProvider.html5Mode的文档规定,我们捕获服务器上的所有url(类似于otherwise
angular中的路由),并返回与根域相同的html。但是,如果我随后$location
从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路由(如果未绑定其他特定路由),则它与根路由使用相同的html。因此,它基本上在该深度链接的路由上提供主页html。
在检查了问题之后,更新2我们注意到该路由在Angular 1.0.7稳定版本上可以正常工作,但在Angular 1.1.5不稳定版本中显示了上述行为。
我已经检查了更改日志,但是到目前为止,还没有发现任何有用的东西,我想我们可以将其提交为错误,也可以将与他们所做的特定更改相关的不想要的行为提交,或者只是等待以查看是否已将其修复稍后将发布稳定版本。