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));
我有一个 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));