【发布时间】:2016-11-15 14:28:36
【问题描述】:
我一直在使用 Angular 1 中的“标准”路由,这些路由使用 # 符号(例如 /app#/home)。现在我想切换到 HTML5 模式以获得漂亮的 URL(例如:/app/home)。
我已经用$locationProvider.html5Mode(true) 切换了 HTML5 模式,一切正常。
但是,我们的一些用户可能仍然在电子邮件中拥有旧 URL 格式的书签和链接,并且这些会损坏。我希望旧 URL 仍然有效(让 /app#/home 自动重定向到 /app/home)。
我尝试过使用默认路由来查看哈希,如下所示:
$routeProvider
.when({ ... })
.otherwise({
'controller': function($location) {
var hash = $location.hash();
// At this point the hash is undefined (even when there is one in the URL)
console.log('hash = ' + hash);
// if (hash && hash.indexOf('/') == 0) {
// $location.path(hash);
// } else {
// $location.path('/home')
// }
}
});
不幸的是,这不起作用(控制器看不到哈希,Angular 似乎进入了无限摘要循环)。
你知道如何实现吗?
【问题讨论】:
-
更好的解决方案是检查位置是否包含'#'。如果是,则将其删除并重定向到它。
-
else子句有什么原因吗?如果没有哈希,你不是已经到了你想去的地方吗? -
实际上我什至根本无法获得哈希值。更新了问题以反映这一点。
-
你为什么还要这样做?
Html5Mode自动回退,适用于不支持它的浏览器。你根本不需要做任何事情来继续使用哈希路由。
标签: javascript angularjs html