【问题标题】:How can i pass Data into my SQLite-Database我如何将数据传递到我的 SQLite 数据库中
【发布时间】:2023-03-11 09:45:02
【问题描述】:

你好 :) 我对编程很陌生,最近我开始了一个 IONIC 应用程序。然而我被卡住了。我想做一个电话簿之类的东西,您可以在其中获取随机 JSON 联系人并将它们保存到您的 sqlite 数据库。

我知道了:

import { Storage ] from '@ionic/storage';
    @component({
        selector: 'page-home'
        templateUrl: 'home.html'
});

export class HomePage {

  posts: any;
  persons: any;

constructor(public navCtrl: NavController, public http: Http, public storage: Storage) {

  this.http.get('https://jsonplaceholder.typicode.com/users').map(res=> res.json()).subscribe(data => {
  this.posts = data;
 });

}

//here i would like to recieve the data from the tapped Item

  setData(){
    console.log();
        this.storage.set('myData', this.posts);
        console.log(this.posts);
  };


  getData(){
     this.storage.get('myData').then((data) => {
       if (data !=null){
         console.log(data);
       }
    })
  };
}

这是视图: 当我单击/点击保存按钮时,我想将值存储在我的 sqlite 数据库中并将它们显示在我的“本地联系人”中。

<ion-content>
        <ion-list>
            <ion-item *ngFor="let post of posts">
                <ion-list>
                    <ul><h1>{{post.name}}</h1></ul>
                    <ul><p>{{post.username}}, {{post.email}}</p></ul>
                    <ul><p>phone: {{post.phone}}</p></ul>
                    <button ion-button (click)="setData()">Set Data</button>
                </ion-list>
            </ion-item>
        </ion-list>
    </ion-content>

也许有人遇到过类似的问题,可以帮助我解决这个问题。 谢谢:)

【问题讨论】:

    标签: sqlite angular typescript ionic-framework


    【解决方案1】:

    使用 Ionic 处理持久存储的最佳方法是使用 ionic-storage

    Ionic Storage 是由 ionic 团队创建和维护的一个包,用于从每个浏览器或平台的具体细节中抽象出开发,并自动使用可用的最佳存储解决方案。


    1.安装依赖项

    对于 SQLite,您需要先安装 Angular 和 Cordova 的依赖项:

    npm install @ionic/storage --save

    cordova plugin add cordova-sqlite-storage --save

    然后在 src/app/app.module.ts 中编辑您的 NgModule 声明,将 IonicStorageModule 添加为导入:

    import { IonicStorageModule } from '@ionic/storage';
    
    @NgModule({
      declarations: [...],
      imports: [
        IonicModule.forRoot(MyApp),
        IonicStorageModule.forRoot({
          name: '__mydb',
          driverOrder: ['indexeddb', 'sqlite', 'websql'],
        })
      ],
      bootstrap: [...],
      entryComponents: [...],
      providers: [...],
    })
    export class AppModule { }
    

    2。将 Storage 注入到你的组件中

    import { Component } from '@angular/core';
    import { Storage } from '@ionic/storage';
    
    @Component({
      selector: 'page-home',
      templateUrl: 'home.html'
    })
    export class HomePage {
      constructor(public storage: Storage) {}
    }
    

    3。在 SQLite 中存储数据

    每当您访问存储时,请确保始终将您的代码包装在以下内容中:

    storage.ready().then(() => { /* code here safely */});
    

    3.1 保存键值对

    storage.ready().then(() => {
        storage.set('some key', 'some value');
    });
    

    3.2 检索值

    storage.ready().then(() => {
      storage.get('age').then((val: string) => {
          console.log('Your age is', val);
      });
    });
    

    3.3 删除键值对

    storage.ready().then(() => {
        storage.remove('key').then((key: string) => { /* do something after deletion */})
    });
    

    【讨论】:

    • 感谢您的回答 :) 这很有帮助,但不完全是我想要的。也许我的描述太不准确了。我完成了所有步骤到 3。问题是,我不知道如何访问被点击项目的数据。当我点击一个联系人时,我希望将这个特定联系人的对象发送到 saveContact() 函数。
    • 对不起,您的问题有点误导,也许您应该修改 OP 以更好地为未来的读者传达您的问题。现在,为了将特定的联系人对象传递给 setData() 函数,只需将您的代码更改为 &lt;button ion-button (click)="setData(post)"&gt;Set Data&lt;/button&gt;post 已在您的 *ngFor 中定义,因此您可以将其用作函数调用的参数。如果这回答了您的问题,请投票支持评论以及原始答案。
    • 是的,这就是我一直在寻找的答案。非常感谢。出于某种原因,我不能赞成您的评论和答案,因为我没有足够的声誉。当我达到 15 名声望时,我会这样做 ;)
    • 很高兴我能帮上忙,伙计。 :)
    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 2017-06-16
    相关资源
    最近更新 更多