使用服务

使用共享服务的一个非常重要的事情是它们必须包含在必须共享它们的最顶层组件的 providers 数组中。

这是为什么?好吧,让我们假设我们在每个 Componentproviders 数组中包含 MyService 参考。就像是:

@Component({
  templateUrl:"page1.html",
  providers: [MyService]
})

@Component({
  templateUrl:"page2.html",
  providers: [MyService]
})

这样**,将为每个组件创建一个新的服务**实例,因此一个页面将保存数据的实例将与用于获取数据的实例不同。所以那不行。

为了使整个应用程序使用相同的实例(使服务作为单例服务工作),我们可以在 App Component 中添加它的引用,如下所示:

@Component({
  template: '<ion-nav [root]="rootPage"></ion-nav>',
  providers: [MyService]
})

你也可以在 ionicBootstrap(MyApp, [MyService]); 中添加 MyService 参考,但是根据 Angular2 风格指南

确保 Angular 2 进样器在最顶级组件处提供服务,以便共享它们。

为什么?Angular 2 注入器是分层的。

为什么?在向顶级组件提供服务时,该实例是共享的,并且可供该顶级组件的所有子组件使用。

为什么?当服务共享方法或状态时,这是理想的选择。

为什么?当两个不同的组件需要不同的服务实例时,这并不理想。在这种情况下,最好在组件级别提供需要新的单独实例的服务。

它会工作。这不是最好的做法。引导程序提供程序选项用于配置和覆盖 Angular 自己的预注册服务,例如其路由支持。

App Component 将是最好的选择。