我如何在Ionic2中设置全局变量?

时间:2017-03-09 19:33:12

标签: cordova typescript ionic-framework ionic2

当我使用SQLite时,需要一直重新打开数据库,而这太糟糕了。 如何使用SQLite实例创建/设置全局变量以在组件之间共享它?

简单示例:

应用/ 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);
        });
    }
}

1 个答案:

答案 0 :(得分: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);
        });
    }
}