这里有一个奇怪的情况。
所以我有两条路线:/RouteA
(/
也默认为此处)和/RouteB
/RouteA
实际上使用客户端路由,而/RouteB
则不重要。
当我尝试导航到/RouteB
时,网址最初为/RouteB
,这是正确的。
由于IE9不支持HTML5,因此Angular会使用hashbang将网址重写为/#/RouteB
当重写发生时,它会强制浏览器刷新(我们可以停止此行为吗?),这会立即将我发送回/
(最终/RouteA
。
有没有办法阻止浏览器在重写网址时重新发送请求?
基本代码目前为<base href="/"/>
。
我尝试做类似这样的事情,让我可以登陆页面,但打破了主菜单中的锚标记,试图将我送回/RouteA
:
if (window.history && window.history.pushState) {
$locationProvider.html5Mode(true);
}
else {
window.location.hash = '/';
$locationProvider.html5Mode(false);
}
e.g。 /#/RouteB
变为/RouteB/#/
。然后点击返回/RouteA
的链接,路线最终变为/RouteB/RouteA
,显然会中断。
所以我尝试了类似问题的解决方案,但它产生了与上面相同的结果。 $location / switching between html5 and hashbang mode / link rewriting
有没有人有任何想法?
提前致谢!
答案 0 :(得分:0)
我设法让它发挥作用。它不漂亮,但由于/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 / switching between html5 and hashbang mode / link rewriting,我的问题也在上面提到过。
现在,当导航到/RouteB
时,路由会被重写为/RouteB#/
,而/
将不会重新加载/
并将我转发回另一页。
这个解决方案有两个问题。
/RouteB#/
导航到此页面可能会弄乱相关链接。例如/RouteB/#/
变为/NewRoute
因此,尝试链接到/RouteB/NewRoute
最终会链接到href="#"
可能会对此做出很多改进,如果我让他们生病,请尝试记住更新此答案。
如果有人有更好的解决方案,请随时发布。
&lt; 3 IE9
答案 1 :(得分:-1)
您与路线的链接是什么样的?我认为你需要一个完整的路径来到你的应用程序之外的任何路由。你可能会尝试类似的东西:
<a href="RouteA">Route A</a>
<a href="/RouteB">Route B</a>