最佳答案
我的印象是,Angular 会重写出现在 tempaltes 中锚标记的 href 属性中的 URL,这样它们就可以在 html5模式或 hashbang 模式下工作。定位服务的文档似乎说 HTML 链接重写处理了 hashbang 的情况。因此,我希望当不处于 HTML5模式时,会插入散列,而在 HTML5模式下,则不会。
然而,似乎没有重写正在发生。下面的示例不允许我仅仅更改模式。应用程序中的所有链接都需要手工重写(或者在运行时从变量派生)。是否需要根据模式手动重写所有 URL?
我没有看到在 Angular 1.0.6、1.1.4或1.1.3中进行任何客户端 URL 重写。似乎所有 href 值都需要在 #/for hashbang mode 和/for html5 mode 前面加上 #/。
是否有一些必要的配置导致重写? 我是否读错了文档? 还是做了其他愚蠢的事情?
举个小例子:
<head>
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.3/angular.js"></script>
</head>
<body>
<div ng-view></div>
<script>
angular.module('sample', [])
.config(
['$routeProvider', '$locationProvider',
function ($routeProvider, $locationProvider) {
//commenting out this line (switching to hashbang mode) breaks the app
//-- unless # is added to the templates
$locationProvider.html5Mode(true);
$routeProvider.when('/', {
template: 'this is home. go to <a href="/about"/>about</a>'
});
$routeProvider.when('/about', {
template: 'this is about. go to <a href="/"/>home</a'
});
}
])
.run();
</script>
</body>
附录: 在重读我的问题时,我发现我使用了“重写”这个术语,但是对于我想要重写的人和时间没有充分的清晰度。问题是如何让 角度在呈现路径时重写 URL,以及如何让它跨两种模式统一地解释 JS 代码中的路径。它是关于如何使 Web 服务器做 HTML5兼容的请求重写的 没有。