Что я сделал:
- Установлен ionic сегодня, командой
npm install -g ionic
и произнесением 'y' для интеграции с cordova.
- Установлено Cordova:
npm install -g cordova
- Создан новый проект:
ionic start sqlite3demo blank
Установлено ионное хранилище:
ionic cordova plugin add cordova-sqlite-storage
npm install --save @ionic-native/sqlite
Теперь для кода. Я импортировал SQLite
в app.module.ts
так:
import { BrowserModule } from '@angular/platform-browser';
import { ErrorHandler, NgModule } from '@angular/core';
import { IonicApp, IonicErrorHandler, IonicModule } from 'ionic-angular';
import { SplashScreen } from '@ionic-native/splash-screen';
import { StatusBar } from '@ionic-native/status-bar';
import { SQLite } from '@ionic-native/sqlite';
import { MyApp } from './app.component';
import { HomePage } from '../pages/home/home';
@NgModule({
declarations: [
MyApp,
HomePage
],
imports: [
BrowserModule,
IonicModule.forRoot(MyApp)
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
HomePage
],
providers: [
StatusBar,
SplashScreen,
{provide: ErrorHandler, useClass: IonicErrorHandler},
SQLite
]
})
export class AppModule {}
А затем я изменил домашнюю страницу по умолчанию следующим образом:
<ion-header>
<ion-navbar>
<ion-title>
SQLite demo
</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<ion-content>
<button ion-button (click)="createTables()">Create db</button>
<p>Result: {{ message }}</p>
</ion-content>
</ion-content>
И, наконец, я изменил home.ts
так:
import { Component } from '@angular/core';
import { NavController, Platform } from 'ionic-angular';
import { SQLite, SQLiteObject } from '@ionic-native/sqlite';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
message = '';
db: SQLiteObject;
constructor(private platform: Platform, public navCtrl: NavController, private sqlite: SQLite) {
this.platform.ready().then(() => {
this.sqlite.create({
name: 'todos.db',
location: 'default'
})
.then((db: SQLiteObject) => {
this.message = JSON.stringify(db);
this.db = db;
});
});
}
public createTables() {
return this.db.executeSql(
`CREATE TABLE IF NOT EXISTS list (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT
);`)
.then(() => this.message = 'OK')
.catch((err) => this.message = "error detected creating tables -> " + JSON.stringify(err));
}
}
После всего этого я выполняю ionic cordova run android
, и я вижу JSON из db
, но после этого я нажимаю кнопку, чтобы создать таблицу, и вместо того, чтобы увидеть «ОК», я вижу JSON из ошибка.
Что я сделал не так? Почему не работает?
РЕДАКТИРОВАТЬ: Версии, которые я использую:
"@ionic-native/sqlite": "^4.12.2",
"cordova-sqlite-storage": "^2.4.0"