Ionic 2:无法创建表TypeError:无法读取未定义的属性'apply'

时间:2016-12-27 15:23:20

标签: sqlite ionic-framework ionic2 cordova-plugins

我正在尝试打开数据库并在Ionic 2应用程序中创建一个表。 以下方法是服务的一部分,应该打开数据库并创建表:

initDb() {
    let db = new SQLite();
    db.openDatabase({
        name: "data.db",
        location: "default"
    }).then(() => {
        db.executeSql("CREATE TABLE IF NOT EXISTS people (avatarUrl VARCHAR, firstName VARCHAR, lastName VARCHAR)", []).then((data) => {
            console.log("Table created: ", data);

        }, (error) => {
            console.error("Unable to create table", error);

        })
    }, (error) => {

        console.error("Unable to open database", error);
    });
  }

在我的主页的构造函数中调用该方法:

constructor(public platform: Platform, public navCtrl: NavController,  public dbService: DBService) {
     this.platform.ready().then(() => {
       this.dbService.initDb();
     });
  }

我不知道为什么会收到此错误(请参阅标题)。 感谢

1 个答案:

答案 0 :(得分:3)

抱歉,我无法重现此错误,但我自己构建了一个testapp。此应用程序适用于我,尽管也在 ready 中调用:

app.component.ts:

import { Component } from '@angular/core';
import { Platform } from 'ionic-angular';
import { StatusBar, Splashscreen, SQLite } from 'ionic-native';

import { TabsPage } from '../pages/tabs/tabs';
import { DbService } from '../providers/db-service';

@Component({
  templateUrl: 'app.html',
  providers: [DbService]
})
export class MyApp {
  rootPage = TabsPage;

  constructor(public platform: Platform, public dbService: DbService) {
    platform.ready().then(() => {
      // Okay, so the platform is ready and our plugins are available.
      // Here you can do any higher level native things you might need.
      StatusBar.styleDefault();
      Splashscreen.hide();
      this.dbService.initDb();
    });
  }
}

我使用这个ionic-command创建了这项服务:

ionic g provider DbService

DB-service.ts:

import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';
import { SQLite } from 'ionic-native';

/*
  Generated class for the DbService provider.

  See https://angular.io/docs/ts/latest/guide/dependency-injection.html
  for more info on providers and Angular 2 DI.
*/
@Injectable()
export class DbService {

  constructor(public http: Http) {
    console.log('Hello DbService Provider');
  }

  initDb() {
    let db = new SQLite();
    db.openDatabase({
      name: "data.db",
      location: "default"
    }).then(() => {
      db.executeSql("CREATE TABLE IF NOT EXISTS people (avatarUrl VARCHAR, firstName VARCHAR, lastName VARCHAR)", []).then((data) => {
        console.log("Table created: ", data);

      }, (error) => {
        console.error("Unable to create table", error);

      })
    }, (error) => {

      console.error("Unable to open database", error);
    });
  }

}

ionic-version:2.1.18

cordova-version 6.0.0

希望它有所帮助。