Ionic2 离子2存储器返回空值
在RC0之后,我使用离子2存储进行堆叠。 都是我干的 login.tsIonic2 离子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
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不,我开始了本地开发