在我启动应用程序之前,如果有任何可用的用户数据,我将检查本地存储,如果是,我将导航到主页,否则登录页面。
这里我无法检索存储的数据,请输入任何信息......
目前正在使用Ionic 2 SQlite插件。
注意:在浏览器中它工作正常,但在Android设备上它无法正常工作。
loadUser() {
this.userSettings.getUser().then(user => {
this.userObj = JSON.stringify(user);
if (user) {
console.log('App : ', this.userObj);
this.nav.setRoot(HomePage,this.userObj);
} else {
console.log('App : No user data');
this.rootPage = LoginPage;
}
});
}
this.userSettings.addUser(
userData.employeeCode,
userData.password,
userData.role
);
getUser() {
if (this.sql) {
return this.sql.get('user').then(value => value);
} else {
return new Promise(resolve => resolve(this.storage.get('user').then(value => value)));
}
}
addUser(employeeCode, password, role) {
let item = { employeeCode: employeeCode, password: password, role: role };
if (this.sql) {
this.sql.set('user', JSON.stringify(item)).then(data => {
this.events.publish('userObj:changed');
});
} else {
return new Promise(resolve => {
this.storage.set('user', JSON.stringify(item)).then(() => {
this.events.publish('userObj:changed');
resolve();
});
});
}
}
providers: [
{ provide: ErrorHandler, useClass: IonicErrorHandler },
AuthService,
SqlStorage,
UserSettings,
Storage
]
提前致谢。
答案 0 :(得分:5)
问题已解决
在 ngAfterViewInit 中调用sqlite操作后,它运行正常。
ngAfterViewInit() {
this.storage.get('user').then((user: any) => {
if (user) {
this.userCredentials = JSON.parse(user);
this.nav.setRoot(HomePage, this.userCredentials);
}
else {
this.rootPage = LoginPage;
}
});
}
[来源](https://github.com/driftyco/ionic-conference-app/blob/master/src/pages/account/account.ts)
干杯:)
答案 1 :(得分:1)
当您指出您的代码在Chrome中工作但在您的设备上没有时,您可能会在cordova的device.ready()触发之前调用sqlite。
在app.component.ts中确保以下列方式调用this.loadUser():
(platform.ready()应该已经在构造函数中)
platform.ready().then(() => {
this.loadUser();
});