Javascript IONIC 2中inyected服务的实例类型

Javascript IONIC 2中inyected服务的实例类型,javascript,angular,typescript,ionic2,Javascript,Angular,Typescript,Ionic2,我想知道injected的服务在IONIC 2上是如何工作的。具体来说,我想知道如果一个服务在两个或多个控制器中使用,将存在多少实例 在过去,我问过一位同事,他告诉我离子2可以使用单态模式,但在我的测试中,我认为它不能 我有两个控制器,A和B;和一个服务SVC1。是这样的 控制器A import { NavController, Platform } from 'ionic-angular'; import { PageB } from '../pageb/pageB'; import { SV

我想知道injected的服务在IONIC 2上是如何工作的。具体来说,我想知道如果一个服务在两个或多个控制器中使用,将存在多少实例

在过去,我问过一位同事,他告诉我离子2可以使用单态模式,但在我的测试中,我认为它不能

我有两个控制器,A和B;和一个服务SVC1。是这样的

控制器A

import { NavController, Platform } from 'ionic-angular';
import { PageB } from '../pageb/pageB';
import { SVC1 } from '../../providers/svc1';

@Component({
  selector: 'page-a',
  templateUrl: 'a.html',
  providers: [SVC1]
})

export class PageA {
  constructor(public navCtrl: NavController, platform: Platform, public svc: SVC1) {
  }

onAddEventClicked(event): void {    
  this.navCtrl.push(PageB);
  }
}
控制器B

import { NavController, Platform } from 'ionic-angular';
import { SVC1 } from '../../providers/svc1';

@Component({
  selector: 'page-b',
  templateUrl: 'b.html',
  providers: [SVC1]
})

export class PageB {
  constructor(public navCtrl: NavController, platform: Platform, public svc: SVC1) {
  }
}
服务

import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
@Injectable()
export class SVC1 {
  constructor(public http: Http) { 
    console.log('creating another instance');
  }
}
这很简单。PageA有一个按钮。单击它时,它将转到第b页。PageA和PageB使用相同的服务

如果此服务是单例服务,则“创建另一个实例”消息只会出现一次。但是它出现了两次

为什么会发生这种情况?IONIC是否使用单例模式输入服务参考?有没有办法让我的服务只有一个实例

非常感谢


PS:很抱歉我的英语不好,希望我能随着时间的推移有所提高。

您已经为每个页面设置了服务提供商。这不是单一模式。当您需要仅可用于该组件的服务时,可使用此选项

对于单例模式,您可以在app.module.ts的NgModule中将其设置为提供程序

@NgModule({
 declarations:[..]
 imports:[..],
 bootstrap:[IonicApp],
 entryComponents:[...],
 providers:[SVC1] //here
})
export class AppModule { }
然后将服务添加到所需组件的构造函数中。 Angular Official docs有关于依赖项注入的信息