Angular 2延迟加载模块在导航路线时多次初始化?

时间:2016-08-23 17:34:15

标签: angular lazy-loading angular2-routing angular2-services

使用RC5

我配置了一个延迟加载的路由:

{path: STATE.PROFILE, loadChildren: 'app/profile/profile.module' },

指向此模块:

@NgModule({
  imports: [CommonModule, FormsModule, routing],
  declarations: [SelectProfileComponent, ConfirmProfileComponent],
  providers: [ProfileCacheService]
})
export default class ProfileModule { }

......以及这些路线

const routes: Routes = [
  { path: '', component: SelectProfileComponent, canActivate: [ProfileGuard] },
  { path: STATE.CONFIRM, component: ConfirmProfileComponent, canActivate: [ProfileGuard] },
];

在select-profile组件中,有一个按钮,导航到其兄弟路径“State.Confirm”通过在根AppModule中声明的“共享”服务。 Angular路由器便于在此共享服务中导航:

return this.router.navigateByUrl(url);

问题是存在于ProfileCacheService中的状态(在延迟加载的模块中声明),但在导航到“确认”路由后被清除。发生这种情况的原因是因为模块在尝试导航到同一延迟加载模块中的路由时被重新初始化 - 这反过来又重新初始化CachService,因为它是模块-scoped

在根模块上声明ProfileCacheService可以解决这个问题,但它无法实现延迟加载的目的,因为此服务只能在此模块中使用。

有没有人遇到同样的问题?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,看起来它已经在master中修复并且将成为rc6的一部分:

https://github.com/angular/angular/issues/10841