Imはlazyloadでイオン3を使用し、角4は問題がない。 それをシングルトンにするには、あなたのアプリケーションモジュールがサービスを提供していることを確認してください。そのサービスを使用する@Componentのプロバイダを削除します。
アプリケーションモジュール
@NgModule({
...
providers: [
StatusBar,
SplashScreen,
{ provide: ErrorHandler, useClass: IonicErrorHandler },
Singleton // the service or provider to be single ton
]
})
export class AppModule { }
サービス
import { Injectable } from '@angular/core';
import 'rxjs/add/operator/map';
@Injectable()
export class Singleton {
data = "init data";
constructor() {
console.log('Hello Singleton Provider');
}
set(data){
this.data = data;
}
log(){
console.log(this.data);
}
}
TESケースイオンページ上のサービス
最初のページ
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { Singleton } from '../../providers/singleton';
@IonicPage()
@Component({
selector: 'page-first',
templateUrl: 'first.html'
})
export class FirstPage {
constructor(public navCtrl: NavController, public navParams:
NavParams,private single:Singleton) {
}
ionViewDidLoad() {
console.log('ionViewDidLoad First');
this.single.log(); // log init data;
this.single.set("First singleton data");
}
}
2番目のページ
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { Singleton } from '../../providers/singleton';
@IonicPage()
@Component({
selector: 'page-second',
templateUrl: 'second.html'
})
export class SecondPage {
constructor(public navCtrl: NavController, public navParams:
NavParams,private single:Singleton) {
}
ionViewDidLoad() {
console.log('ionViewDidLoad Second');
this.single.log(); // log First singleton data
}
}
3ページ目コンポーネント
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { Singleton } from '../../providers/singleton';
@IonicPage()
@Component({
selector: 'page-second',
templateUrl: 'second.html',
providers:[Singleton] // wrong because its create a new instance
})
export class ThirdPage {
constructor(public navCtrl: NavController, public navParams:
NavParams,private single:Singleton) {
}
ionViewDidLoad() {
console.log('ionViewDidLoad ThirdPage');
this.single.log(); // log init data
}
}
に追加プロバイダがそれシングルトンにするためにコンポーネントにプロバイダを削除することを確認した場合には、新しいインスタンスを作成します。
私はプロジェクトで同様の輸入とインジェクタを使用し、再現できませんでした。 Ionic v3.1.2、Angular 4.1.0 – Nelson
これはあなたが記述している非常に奇妙な動作です。 WebアプリをAngular 2からAngular 4にアップグレードするとき、私はそのような変更に気付かなかった。 –
私は本当にこの問題を解決する方法を知っておく必要があります –