gpt4 book ai didi

javascript - IONIC 2 中受感染服务的实例类型

转载 作者:太空宇宙 更新时间:2023-11-04 16:13:36 24 4
gpt4 key购买 nike

我想知道注入(inject)的服务在 IONIC 2 上如何工作。具体来说,我想知道如果一个服务在两个或多个 Controller 中使用,将会存在多少个实例。

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

我有两个 Controller ,A和B;和一项服务 SVC1。是这样的吗。

Controller 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);
}
}

Controller 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 有一个按钮。当点击它时,它会转到PageB。 PageA和PageB使用相同的服务。

如果该服务是单例的,则“正在创建另一个实例”消息将仅出现一次。但它出现了两次。

为什么会出现这种情况? IONIC 使用单例模式来感染服务引用?有没有办法让我的服务只有一个实例?

非常感谢

PS:抱歉我的英语不好,希望我能通过更多的时间进步。

最佳答案

您已将服务设置为每个单独页面的提供者。这不是单例模式。当您需要仅适用于该组件的服务时,可以使用此选项。

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

@NgModule({
declarations:[..]
imports:[..],
bootstrap:[IonicApp],
entryComponents:[...],
providers:[SVC1] //here
})
export class AppModule { }

然后将服务添加到您需要的任何组件的构造函数中。 hereAngular 官方文档有关于依赖注入(inject)的信息

关于javascript - IONIC 2 中受感染服务的实例类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41254469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com