2017-03-09 11 views
0

私はSQLiteを使用すると、いつもデータを再オープンする必要があります。これはあまりにも悪いことです。 コンポーネント間で共有するSQLiteインスタンスでグローバル変数を作成/設定する方法はありますか?Ionic2でグローバル変数を設定する方法は?

簡単な例:

アプリ/ app.ts

export class MyApp { 
    constructor(public platform: Platform) { 
     this.platform.ready().then(() => { 
      @SetGlobal(); 
      let databaseInstance = new SQLite(); 
     }); 
    } 
} 

ホーム/ home.ts

export class HomePage { 
    constructor(public platform: Platform, databaseInstance) { 
     databaseInstance.then(() => { 
      databaseInstance.executeSql('create table demo(name VARCHAR(32))', {}).then(() => { 
      }, (err) => { 
       console.error('Unable to execute sql: ', err); 
      }); 
     }, (err) => { 
      console.error('Unable to open database: ', err); 
     }); 
    } 
} 
+0

あなただけの接続を保持し、そのためのサービスを使用することができますこのサービス。 –

+0

あなたが提案するのは、プロバイダを使用してデータベースインスタンスを共有することですが、プロバイダをインスタンス化するたびにデータベースが再オープンされるため、最適ではありません。 –

+1

そのプロバイダを 'app.module.ts'に追加すると、それはシングルトンプロバイダになります。プロバイダをそのサービスのどこかに置かないように注意してください。 –

答えて

1

主なアイデアは、単に共有に接続を保持することですサービスを使用して、接続が1つしか存在していないことを確認します。 app.module.tsでのみこのサービスを提供している場合、このサービスはシングルトンインスタンスになります。

Databaseサービス:

@Injectable() 
export class DatabaseService { 

    public instance = null; 

    constructor(){ 
     this.instance = new SQLite(); 
    } 
} 

app.module.ts:

@NgModule({ 
    ... 
    providers: [ 
    ... 
    DatabaseService 
    ] 
}) 
export class AppModule {} 

home.ts:

export class HomePage { 
    constructor(public platform: Platform, dbService: DatabaseService) { 
     dbService.instance.then(() => { 
      dbService.instance.executeSql('create table demo(name VARCHAR(32))', {}).then(() => { 
      }, (err) => { 
       console.error('Unable to execute sql: ', err); 
      }); 
     }, (err) => { 
      console.error('Unable to open database: ', err); 
     }); 
    } 
} 
関連する問題