简体   繁体   English

Ionic2 Cordova-SQLite-Storage:如何将SQLite用作服务

[英]Ionic2 cordova-sqlite-storage: how to use SQLite as a service

I am trying to use the Cordova plugin sqlite in Ionic 2 as a service. 我正在尝试使用Ionic 2中的Cordova插件sqlite作为服务。

The project builds but it runs a blank page. 项目生成,但运行空白页。

Here is what I see in the android logcat related to that: 这是我在android logcat中看到的与此相关的内容:

10-29 02:15:11.082 8010-8010/? I/chromium: [INFO:CONSOLE(5)] "EXCEPTION: No provider for t!", source: file:///android_asset/www/build/main.js (5)
10-29 02:15:11.082 8010-8010/? I/chromium: [INFO:CONSOLE(5)] "ORIGINAL STACKTRACE:", source: file:///android_asset/www/build/main.js (5)
10-29 02:15:11.082 8010-8010/? I/chromium: [INFO:CONSOLE(5)] "Error: DI Error
                                               at e.Error (<anonymous>)
                                               at e (file:///android_asset/www/build/main.js:5:5322)
                                               at e (file:///android_asset/www/build/main.js:5:10802)
                                               at new e (file:///android_asset/www/build/main.js:5:11130)
                                               at t._throwOrNull (file:///android_asset/www/build/main.js:5:28341)
                                               at t._getByKeyDefault (file:///android_asset/www/build/main.js:5:28697)
                                               at t._getByKey (file:///android_asset/www/build/main.js:5:28252)
                                               at t.get (file:///android_asset/www/build/main.js:5:24608)
                                               at e.get (file:///android_asset/www/build/main.js:7:16300)
                                               at e.get (file:///android_asset/www/build/main.js:8:3564)", source: file:///android_asset/www/build/main.js (5)
10-29 02:15:11.092 8010-8010/? I/chromium: [INFO:CONSOLE(5)] "EXCEPTION: No provider for t!", source: file:///android_asset/www/build/main.js (5)
10-29 02:15:11.092 8010-8010/? I/chromium: [INFO:CONSOLE(5)] "ORIGINAL STACKTRACE:", source: file:///android_asset/www/build/main.js (5)
10-29 02:15:11.092 8010-8010/? I/chromium: [INFO:CONSOLE(5)] "Error: DI Error
                                               at e.Error (<anonymous>)
                                               at e (file:///android_asset/www/build/main.js:5:5322)
                                               at e (file:///android_asset/www/build/main.js:5:10802)
                                               at new e (file:///android_asset/www/build/main.js:5:11130)
                                               at t._throwOrNull (file:///android_asset/www/build/main.js:5:28341)
                                               at t._getByKeyDefault (file:///android_asset/www/build/main.js:5:28697)
                                               at t._getByKey (file:///android_asset/www/build/main.js:5:28252)
                                               at t.get (file:///android_asset/www/build/main.js:5:24608)
                                               at e.get (file:///android_asset/www/build/main.js:7:16300)
                                               at e.get (file:///android_asset/www/build/main.js:8:3564)", source: file:///android_asset/www/build/main.js (5)
10-29 02:15:11.102 8010-8010/? I/chromium: [INFO:CONSOLE(3)] "Error: No provider for t!", source: file:///android_asset/www/build/polyfills.js (3)

My ionic files are like that: "[My project]\\src\\services\\sql-settings\\sql-settings.ts": 我的离子文件是这样的:“ [我的项目] \\ src \\ services \\ sql-settings \\ sql-settings.ts”:

import { Injectable } from '@angular/core';
import { SQLite } from 'ionic-native';

@Injectable()
export class SqlSettingsService {

    constructor(
        public db: SQLite
    ) {     
        this.db = new SQLite();
    }

    openDb(){
        return this.db.openDatabase({
             name: 'data.db',
             location: 'default' // the location field is required
        });
    }

}

"[My project]\\src\\app\\app.module.ts": “ [我的项目] \\ src \\ app \\ app.module.ts”:

import { NgModule } from '@angular/core'; import { IonicApp, IonicModule } from 'ionic-angular'; import { MyApp } from './app.component'; import { HomePage } from '../pages/home/home'; import { SqlSettingsService } from '../services/sql-settings/sql-settings';



@NgModule({   declarations: [
    MyApp,
    HomePage   ],   imports: [
    IonicModule.forRoot(MyApp)   ],   bootstrap: [IonicApp],   entryComponents: [
    MyApp,
    HomePage   ],   providers: [SqlSettingsService] }) export class AppModule {}

And finaly "[My project]\\src\\app\\app.component.ts": 最后“ [我的项目] \\ src \\ app \\ app.component.ts”:

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

import { HomePage } from '../pages/home/home';


import { SqlSettingsService } from '../services/sql-settings/sql-settings';


@Component({
  template: `<ion-nav [root]="rootPage"></ion-nav>`,
  providers: [SqlSettingsService]
})
export class MyApp {
  rootPage = HomePage;

  constructor(platform: Platform, sqlSettingsService: SqlSettingsService) {


    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();

      sqlSettingsService.openDb().then(
        ()=>{alert("OPEN DB IS SUCCESSFUL")},
        (err)=>{alert('Unable to open database: ' + err)}
      );


    });
  }
}

Why are you doing this? 你为什么做这个?

constructor(public db: SQLite) {     
   this.db = new SQLite();
}

This is pointless. 这是没有意义的。 1. There is no provider, so it can't be injected. 1.没有提供者,因此无法注入。 2. Even if it were injected, you're assigning it something new. 2.即使已注入,您仍要为其分配新的内容。 Pointless. 无意义。 What you probably want to do is 您可能想做的是

db: SQLite;

constructor() {
  this.bd = new SQLite();
}

There is no need of that 没有必要

public db: SQLite
) {     
    this.db = new SQLite();
}

simply use this in app.module.ts file 只需在app.module.ts文件中使用它

import { SqlSettingsService } from '../services/sql-settings/sql-settings';

and in provider use SqlSettingsService 并在提供程序中使用SqlSettingsService

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM