在 ngOnInit 之后调用 ngOnDestroy
ngOnDestroy being called after ngOnInit
我有这种情况:我的 2 个页面使用全球服务来提供培训(trainingService
。该服务有一个 loadTraining(type)
和一个 destroyTraining(
type`)。 ;
两个页面使用相同的组件 (TrainingPage
) 其中 type
是一个参数:
{ path: 'training/:trainingType', loadChildren: './pages/training/training.module#TrainingPageModule' },
TrainingPage
在 ngOnDetroy
上调用 destroyTraining
并在 ngOnInit
上调用 loadTraining
,问题是当我从 training1 更改为 traininig2 的顺序时电话是这样的:
ngOnInit -> ngOnDestroy
所以我的 trainingService
进入了一个奇怪的状态。有什么方法可以确保在实例化下一个组件之前调用 ngOnDestroy 吗?
Angular是故意的,应该是正确的做法。 ngOnDestroy
这是 lifecycle-hooks 的最后一个。
它们的调用顺序是:
- ngOnChanges()
- ngOnInit()
- ngDoCheck()
- ngAfterContentInit()
- ngAfterContentChecked()
- ngAfterViewInit()
- ngAfterViewChecked()
- ngOnDestroy()
您可以在这里查看信息:https://angular.io/guide/lifecycle-hooks
您应该改变使用 service
的方式,而不是破坏它或使其成为组件级别。
尽量在组件级别提供服务,而不是在全局级别或模块级别
@Component({
/* . . . */
providers: [trainingService]
})
所以在两个不同的地方使用相同的组件将创建不同的服务实例。
我有这种情况:我的 2 个页面使用全球服务来提供培训(trainingService
。该服务有一个 loadTraining(type)
和一个 destroyTraining(
type`)。 ;
两个页面使用相同的组件 (TrainingPage
) 其中 type
是一个参数:
{ path: 'training/:trainingType', loadChildren: './pages/training/training.module#TrainingPageModule' },
TrainingPage
在 ngOnDetroy
上调用 destroyTraining
并在 ngOnInit
上调用 loadTraining
,问题是当我从 training1 更改为 traininig2 的顺序时电话是这样的:
ngOnInit -> ngOnDestroy
所以我的 trainingService
进入了一个奇怪的状态。有什么方法可以确保在实例化下一个组件之前调用 ngOnDestroy 吗?
Angular是故意的,应该是正确的做法。 ngOnDestroy
这是 lifecycle-hooks 的最后一个。
它们的调用顺序是:
- ngOnChanges()
- ngOnInit()
- ngDoCheck()
- ngAfterContentInit()
- ngAfterContentChecked()
- ngAfterViewInit()
- ngAfterViewChecked()
- ngOnDestroy()
您可以在这里查看信息:https://angular.io/guide/lifecycle-hooks
您应该改变使用 service
的方式,而不是破坏它或使其成为组件级别。
尽量在组件级别提供服务,而不是在全局级别或模块级别
@Component({
/* . . . */
providers: [trainingService]
})
所以在两个不同的地方使用相同的组件将创建不同的服务实例。