angularjs - ui-router/angular-hybrid - 初始加载/重新加载时无法识别路线
问题描述
似乎@ui-router/angular-hybrid
在初始加载/重新加载时无法识别在 ng2+ 模块中注册的路由。如果例如通过键入 url 进行导航,则相同的路线正在工作。
我遵循了来自@ui-router/angular-hybrid的官方升级文档
这是 ng2+AppModule
代码:
const states: NgHybridStateDeclaration[] = [
{
name: 'x',
url: '/x',
component: XComponent
}
];
enableProdMode();
@NgModule({
imports: [
BrowserModule,
UpgradeModule,
UIRouterUpgradeModule.forRoot({states: states}),
ComponentsModule,
DirectivesModule
],
declarations: [AppComponent],
exports: [],
entryComponents: [],
providers: [],
bootstrap: []
})
export class Ng2AppModule {
constructor(
@Inject(forwardRef(() => UpgradeModule)) private upgrade: UpgradeModule,
@Inject(forwardRef(() => Config)) private config: Config
) {}
ngDoBootstrap() {
this.upgrade.bootstrap(document as any, ['app'], { strictDi: true });
}
}
和引导逻辑:
AppModule.config([
'$urlServiceProvider',
($urlService: UrlService) => $urlService.deferIntercept()
]);
getConfig()
.then((config: Config) => {
console.log('CONFIG::::', config);
AppModule.constant('config', config);
setAngularLib(angular);
platformBrowserDynamic([
{
provide: Config,
useValue: config
}
])
.bootstrapModule(Ng2AppModule)
.then(platformRef => {
platformRef.injector.get<NgZone>(NgZone).run(() => {
const urlService = platformRef.injector.get(UIRouter).urlService;
urlService.listen();
urlService.sync();
});
downgradeSharedComponents(AppModule);
});
})
PS 现有的 angularjs 路由工作正常,问题出在 ng2+ 模块中注册的路由。
任何帮助表示赞赏,谢谢^^
解决方案
设法自己解决了这个问题,并想发布答案以防万一有人遇到类似问题。原来我们在旧的 angularjs 代码中有一个奇怪的逻辑,它推迟了$urlRouter
url 同步:
$urlRouterProvider.deferIntercept();
...
$urlRouter.sync();
删除后,上述问题就消失了。
推荐阅读
- java - 如何正确设置自定义事件
- javascript - 对不存在的复选框进行 JQuery 验证
- user-interface - Unity scrollrect 视口不可调整大小
- postgresql - postgresql 串行 pk 恢复后恢复为整数
- c# - CreateAtAction 在 ASP.Net Web API 中返回“没有路由与提供的值匹配”
- sql-server - SQL Server 复杂添加/更新每天合并百万行
- javascript - 在谷歌地图中滑动 div
- python - 将 Scrapy Python 输出写入 JSON 文件
- sql-server - SSIS查找一个表中的多个列到另一个表中的相同ID列
- java - 获取联系人错误 - 如何解决?