延迟从Ionic 2存储中检索数据

时间:2017-03-04 19:33:35

标签: ionic2 local-storage

在我启动应用程序之前,如果有任何可用的用户数据,我将检查本地存储,如果是,我将导航到主页,否则登录页面。

这里我无法检索存储的数据,请输入任何信息......

目前正在使用Ionic 2 SQlite插件。

注意:在浏览器中它工作正常,但在Android设备上它无法正常工作。

app.component.ts:检查用户数据

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;
            }

        });

    }

login.ts:保存用户数据

this.userSettings.addUser(
                            userData.employeeCode,
                            userData.password,
                            userData.role
                        );

user-settings.ts:提供商中的存储文件

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();
                });
            });
        }
    }

app.module.ts:

providers: [
        { provide: ErrorHandler, useClass: IonicErrorHandler },
        AuthService,
        SqlStorage,
        UserSettings,
        Storage
    ]

提前致谢。

2 个答案:

答案 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();
    });