Ionic2 离子2存储器返回空值

Ionic2 离子2存储器返回空值,ionic2,Ionic2,在RC0之后,我使用离子2存储进行堆叠。 都是我干的 login.ts import { Component } from '@angular/core'; import { NavController } from 'ionic-angular'; import { Storage } from '@ionic/storage'; import {TabsPage} from '../tabs/tabs'; @Component({ selector: 'page-login', t

在RC0之后,我使用离子2存储进行堆叠。 都是我干的

login.ts

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { Storage } from '@ionic/storage';
import {TabsPage} from '../tabs/tabs';

@Component({
  selector: 'page-login',
  templateUrl: 'login.html'
})
export class LoginPage {
  driver: any;
  phone: any;

  getPhone(){
    return this.storage.get("phone");
  };

  constructor(private navCtrl: NavController, public storage: Storage)
  {
    this.driver = {
      phone: '',
      password: ''
    };

      this.getPhone().then(phone => {
        console.log('RAW_PHONE: ' + phone);
        this.phone = phone;
        if (this.phone != undefined || this.phone != null){
          console.log('PHONE: ' + this.phone);
          this.navCtrl.setRoot(TabsPage);
        }
      });

  }
feed.ts

import { Component } from '@angular/core';
import { Storage } from '@ionic/storage';

@Component({
  selector: 'page-feed',
  templateUrl: 'feed.html'
})
export class FeedPage {
  getTruck(){
    return this.storage.get("truck")
  };

  constructor(public storage: Storage) {
    this.getTruck().then(val => {
        console.log('SAVED TRUCK: ' + val);
      });
  }
在emulator上成功启动后,我看到一个日志:

DEVICE READY FIRED AFTER 1467 ms
Ionic Storage driver: cordovaSQLiteDriver
RAW_PHONE: null
Ionic Push: saved push token: cWPGBZzfchU:APA91bE5Rqk-mU4my7Avb689JRaWEA-b0mbkqPPiZui8M4bQR8TDayjwhLrS04Aj4qB9Y3_-IWLy9OoLrGaci5KhRvwgWkE4FZ4eSbgB2qkkql8Nk-oItgdo1ddN9vX_asyfYnys7TiK
Token saved: cWPGBZzfchU:APA91bE5Rqk-mU4my7Avb689JRaWEA-b0mbkqPPiZui8M4bQR8TDayjwhLrS04Aj4qB9Y3_-IWLy9OoLrGaci5KhRvwgWkE4FZ4eSbgB2qkkql8Nk-oItgdo1ddN9vX_asyfYnys7TiK
LOGIN RESPONSE: ok
LOGIN - SAVE PHONE: 55555
RESPONSE AFTER LOGIN: [object Object]
TRUCK NUMBER AFTER LOGIN: 3 (it means I successfuly got number and set in storage)
SAVED TRUCK: null (it means I try to get value from storage)
在第一次尝试进行身份验证时,我得到空值,但随后我关闭应用程序,从应用程序管理器中杀死它,再次启动并尝试进行身份验证,并获得保存的值。但我仍然需要登录,因为存储丢失了我的登录值。
有什么问题吗?

在我的情况下,这很好,您需要在存储准备就绪后留下(然后)

例如:

this.storage.set('forms_data', this.forms_data).then((val) => {
      this.navCtrl.setRoot(HomePage);
    });

安装cordova sqlite存储插件:

cordova plugin add cordova-sqlite-storage --save
安装“@ionic/storage”软件包(对于ionic 2>=RC.0可选):

在/src/app/app.module.ts中添加以下行

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

export function provideStorage() {
  return new Storage(['sqlite', 'websql', 'indexeddb'], { name: 'database_name' });
}

// Add "Storage" inside providers
providers: [
   { provide: Storage, useFactory: provideStorage }, Storage
]
使用set()和get()方法存储和检索页面中的数据

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

export class MyApp {
  constructor(storage: Storage) {
    storage.set('key', 'value 1'); // store
    storage.get('name').then((val) => { // retrive
      console.log('Your value is', val);
    })
  }
}
如需澄清,请查看


每次看到这样的内容时,请在

查看视频参考:

myFunction().then(....)
console.log('Your value is', storage.get('name'));

然后myFunction正在执行一些异步工作-->因此执行此函数可能需要一些或更多时间。 但是JavaScript运行到完成-->它从您的第一行代码开始,并通过您的代码-->意味着浏览器不会等到调用then()的回调。它启动this.storage.get()函数,并继续运行console.log。在某个时刻,this.storage.get()已经完成并调用了您在then()中定义的回调 sso您需要像这样使用:

myFunction().then(....)
console.log('Your value is', storage.get('name'));

你找到你的解决方案了吗?@behroozdalvandi不,我开始了本地开发