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

Angular Router not updating browser URL when called from AngularJS

我有一个 AngularJS 应用程序,我正在使用 ngUpgrade 将其转换为混合 Angular/AngularJS 应用程序。 AngularJS 应用程序不寻常,因为它不使用 AngularJS 或 Angular UI 路由器 - 相反,它有自己的手动导航解决方案,不't 更新浏览器中显示的 URL,或与浏览器的历史记录交互 API。到目前为止,还不错。

我想开始在混合应用程序中使用 Angular 路由器,但最初只用于新页面。

为了让应用程序的两个部分 - Angular 和 AngularJS - 彼此互操作,我降级了 Angular 路由器服务并将其注入我的其中一个AngularJS 服务,以便我可以从我的 AngularJS 代码调用 Router.navigateByUrl() 导航到新的 Angular 页面组件。

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

奇怪的是,浏览器 URL 并没有改变。当我为路由器启用跟踪时,我可以看到 new 路由被正确处理,并且 new 页面显示在浏览器中,但是浏览器 URL 仍然显示 old 路线。另外,如果我查看浏览器历史记录,new 路由尚未添加到其中。

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

当我从我的 Angular 代码调用 Router.navigateByUrl() 时,一切正常 - 除了 当我这样做 after 我是从 AngularJS 做的,然后我看到了同样的症状。就好像直接从 AngularJS 调用 Router 以某种方式打破了路由和浏览器 URL 栏之间的 link。

谁能帮忙...?

所以问题是 AngularJS $location 服务在路由更改时没有更新,导致其值与浏览器中显示的值之间存在差异。此服务中还有一个手表,它在每个摘要周期中都会被触发,然后根据 $location 服务中的值重置浏览器 url!

原来这是因为我需要在 AppModule 中配置统一 Angular 定位服务,即:

imports: [
  LocationUpgradeModule.config()
]

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

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