[从AngularJS调用时,Angular路由器不更新浏览器URL

问题描述 投票:0回答:1

我有一个AngularJS应用程序,正在使用ngUpgrade转换为混合Angular / AngularJS应用程序的过程中。 AngularJS应用程序不常见,因为它不使用AngularJS或Angular UI路由器-而是拥有自己的手动导航解决方案,该解决方案不会更新浏览器中显示的URL,也不会与浏览器的历史API交互。到目前为止,一切都很好。

我想开始在混合应用程序中使用Angular Router,但最初仅用于新页面。

为了获得应用程序的两部分-Angular和AngularJS-彼此进行互操作,我已经降级了Angular Router服务并将其注入到我的AngularJS服务之一中,以便可以调用Router.navigateByUrl()导航到新的Angular页面组件,来自我的AngularJS代码。

这可以正常工作-Angular页面组件已添加到我的<router-outlet>中,并按预期显示在浏览器中。

但是奇怪的是,浏览器URL不会更改。启用路由器跟踪后,可以看到new路由已正确处理,并且new页面显示在浏览器中,但浏览器URL仍显示old路由。另外,如果查看浏览器的历史记录,还没有添加new路由。

我已经尝试将NgZone注入到我的AngularJS服务中并在Router.navigateByUrl()中调用NgZone.run(),但这没有任何区别。

当我从Angular代码中调用Router.navigateByUrl()时,一切正常-例外当我执行此操作[[之后我已经从AngularJS完成了操作,然后我看到了相同的症状。好像直接从AngularJS调用Router正在以某种方式断开路由和浏览器URL栏之间的链接。

有人可以帮忙吗...?
angularjs angular ng-upgrade
1个回答
0
投票
因此问题是,更改路线时未更新AngularJS $location服务,因此其值与浏览器中显示的值之间存在差异。该服务中还有一个手表,该手表在每个摘要周期中触发,然后从$location服务中的值重置浏览器URL!

原来是因为我需要在AppModule viz中配置统一角度位置服务:

imports: [ LocationUpgradeModule.config() ]

并降级$locationShim服务以注入AngularJS,即:

angularJS.module('my-app') .factory('$location', downgradeInjectable($locationShim));

© www.soinside.com 2019 - 2024. All rights reserved.