在ngOnInit

时间:2019-05-07 06:47:56

标签: angular ionic-framework ionic4

我有这种情况:我的2个页面使用全局服务来提供培训(trainingService。该服务具有loadTraining(type)destroyTraining(类型`)。 ;

两个页面使用相同的组件(TrainingPage),其中type是参数:

{ path: 'training/:trainingType', loadChildren: './pages/training/training.module#TrainingPageModule' },

TrainingPagedestroyTraining上调用ngOnDetroy,在loadTraining上调用ngOnInit,问题是当我从training1更改为traininig2时,呼叫顺序是像这样:

 ngOnInit -> ngOnDestroy 

所以我的trainingService进入了一个奇怪的状态。有什么方法可以确保在实例化下一个组件之前调用ngOnDestroy?

2 个答案:

答案 0 :(得分:1)

Angular故意这样做,这应该是正确的方法。 ngOnDestroy生命周期挂钩中的最后一个。

按以下顺序调用它们:

  1. ngOnChanges()
  2. ngOnInit()
  3. ngDoCheck()
  4. ngAfterContentInit()
  5. ngAfterContentChecked()
  6. ngAfterViewInit()
  7. ngAfterViewChecked()
  8. ngOnDestroy()

您可以在此处查看信息:https://angular.io/guide/lifecycle-hooks

您应该更改service的使用方式,而不破坏它或使其成为组件级。

答案 1 :(得分:0)

尝试在组件级别而非全局级别或模块级别提供服务

@Component({
/* . . . */
  providers: [trainingService]
})

因此在两个不同地方使用的同一组件将创建单独的服务实例。