2017-03-09 7 views
0

Wenn ich SQLite verwende, muss ich die Datenbank immer wieder öffnen, und das ist schade. Wie kann ich eine globale Variable mit SQLite-Instanz erstellen/setzen, um sie zwischen Komponenten zu teilen?Wie kann ich eine globale Variable in Ionic2 setzen?

Einfaches Beispiel:

app/app.ts

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

home/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

Sie einen Dienst für das verwenden können, halten Sie einfach die Verbindung auf Der Service. –

+0

Sie schlagen vor, dass Sie einen Provider verwenden, um die Datenbankinstanz freizugeben, aber jedes Mal, wenn Sie den Provider instanziieren, wird die Datenbank erneut geöffnet, sodass sie nicht optimal ist. –

+1

Wenn Sie diesen Provider zu Ihrem 'app.module.ts' hinzufügen, wird es ein Singleton-Provider sein, seien Sie sich jedoch bewusst, dass Sie diesen Dienst nicht woanders als Provider platzieren. –

Antwort

1

Hauptidee ist, nur die Verbindung in einem gemeinsamen halten Service, um sicherzustellen, dass Sie nur eine Verbindung am Leben haben. Wenn Sie diesen Dienst nur unter app.module.ts bereitstellen, handelt es sich bei diesem Dienst um eine Singleton-Instanz, und genau das möchten Sie.

Database Service:

@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); 
     }); 
    } 
} 
Verwandte Themen