离子2本地存储不能按预期工作

Bil*_*ble 3 local-storage ionic2

我无法让本地存储正常工作.当我做:

this.VEEU_ID = 'veeuID';
this.storage.set(this.VEEU_ID, 11);
alert('Storage was set to: '+JSON.stringify(this.storage.get(this.VEEU_ID)));
Run Code Online (Sandbox Code Playgroud)

我明白了:

Storage was set to: {"_id":1733,"_state":1,"_result":"11","_subscribers":[]}
Run Code Online (Sandbox Code Playgroud)

我认为this.storage.get(this.VEEU_ID)应该返回值11

Aki*_*fas 10

从存储中获取数据是异步的,这意味着我们的应用程序将在数据加载时继续运行.承诺允许我们在数据加载完成后执行某些操作,而不必暂停整个应用程序

所以一个例子应该是:

//set a value in storage
this.storage.set("age", 25);

//get the value from storage
this.storage.get("age").then((value) => {
   alert('Storage value: '+ value);
})
Run Code Online (Sandbox Code Playgroud)

可以在SqlStorage API页面上找到更多信息

Ionic 2 RC的更新

自Ionic 2 RC发布以来,发生了一些变化:

存储已从离子角移除并放入单独的模块,@ ionic/storage.已更新启动器以添加此功能,如果您正在使用存储系统,请确保将其添加到package.json中.在这里查看更多细节.

以下示例显示了Ionic 2存储的方法:

首先我们编辑NgModule位于src/app/app.module.ts.重要的是添加Storage为提供者:

import { Storage } from '@ionic/storage';

@NgModule({
  declarations: [
    ...
  ],
  imports: [
    IonicModule.forRoot(MyApp)
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    ...
  ],
  providers: [ Storage ] // Make sure you do that!
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)

现在我们可以注入Storage我们的组件:

import { Component } from '@angular/core';

import { NavController } from 'ionic-angular';

import { Storage } from '@ionic/storage';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {

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

  }

}
Run Code Online (Sandbox Code Playgroud)

将Storage注入组件后,我们可以使用storage.setstorage.get方法:

this.storage.set('name', 'John').then(() => {
  console.log('Name has been set');
});

this.storage.get('name').then((name) => {
  console.log('Name: ' + name);
});
Run Code Online (Sandbox Code Playgroud)