2017-03-09 69 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

主要思想是牽住在一個共享的連接服務,以確保您只有一個連接活着。如果您僅在您的app.module.ts上提供此服務,則此服務將是單例實例,這正是您想要的。

數據庫服務:

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