我有一个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栏之间的链接。
$location
服务,因此其值与浏览器中显示的值之间存在差异。该服务中还有一个手表,该手表在每个摘要周期中触发,然后从$location
服务中的值重置浏览器URL!原来是因为我需要在AppModule
viz中配置统一角度位置服务:
imports: [
LocationUpgradeModule.config()
]
并降级$locationShim
服务以注入AngularJS,即:
angularJS.module('my-app') .factory('$location', downgradeInjectable($locationShim));