Angular JS IE9 Hashbang url rewriting

Angular JS IE9 Hashbang url rewriting

本文关键字:url rewriting Hashbang IE9 JS Angular      更新时间:2023-09-26

这里的情况很奇怪。

所以我有两条路线:/RouteA(/也默认为这里(和/RouteB

/RouteA实际上使用客户端路由,而/RouteB则不这样做。

当我尝试导航到/RouteB时,URL最初/RouteB是正确的。

由于IE9不支持HTML5,Angular用hashbang重写了url以/#/RouteB

当重写发生时,它会强制浏览器刷新(我们可以停止这种行为吗?(,这会让我直接回到/(最终/RouteA(。

有没有办法防止浏览器在重写 url 时重新发送请求?

基本标记当前<base href="/"/>

尝试做这样的事情,让我登陆页面,但破坏了主菜单中试图将我送回/RouteA的锚标签:

  if (window.history && window.history.pushState) {
     $locationProvider.html5Mode(true);
  }
  else {
     window.location.hash = '/';       
     $locationProvider.html5Mode(false);
  }

例如 /#/RouteB变得/RouteB/#/.然后点击链接返回/RouteA,路线最终变得/RouteB/RouteA显然中断了。

所以我尝试了一个类似问题的解决方案,但它产生了与上面相同的结果。 $location/在 html5 和 hashbang 模式之间切换/链接重写

有人有什么想法吗?

提前感谢!

我设法让它工作。它并不漂亮,但由于/RouteB没有发生客户端路由,所以它足够好了。

在两个不同的应用程序共享一个角度模块之前。相反,我创建了两个不同的模块,并让它们依赖于之前共享的模块。

angular.module('sharedModule', ['dependancy1', ...]);
<!-- RouteA app -->
<div ng-app="sharedModule">...
<!-- RouteB app -->
<div ng-app="sharedModule">...

成为

angular.module('sharedModule', ['dependancy1', ...]);
angular.module('routeAModule', ['sharedModule']);
angular.module('routeBModule', ['sharedModule']);

<!-- RouteA app -->
<div ng-app="routeAModule">...
<!-- RouteB app -->
<div ng-app="routeBModule">...

然后在routeBModule我使用了这篇文章中的修复程序:$location/在html5和hashbang模式之间切换/链接重写,这在我的问题中也提到了。

现在,当导航到/RouteB时,路由被重写为/RouteB#/,这不会重新加载/并将我转储回不同的页面。

这个解决方案有两个问题。

  1. 使用尾随/导航到此页面可能会弄乱相对链接。 例如 /RouteB#/变得/RouteB/#/因此尝试链接到/NewRoute最终会链接到/RouteB/NewRoute
  2. 此页面上带有href="#"的锚标记会导致页面刷新。
可能有很多改进

可以对此进行改进,如果我让他们生病,请尝试记住更新此答案。

另外,如果有人有更好的解决方案,请随时发布。

您与路线的链接是什么样的?我认为您需要一条通往应用程序外部的任何路由的完整路径。您可以尝试如下操作:

<a href="RouteA">Route A</a>
<a href="/RouteB">Route B</a>