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

Vam*_*nki 1 local-storage ionic2

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

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

目前正在使用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;
            }

        });

    }
Run Code Online (Sandbox Code Playgroud)

login.ts:保存用户数据

this.userSettings.addUser(
                            userData.employeeCode,
                            userData.password,
                            userData.role
                        );
Run Code Online (Sandbox Code Playgroud)

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();
                });
            });
        }
    }
Run Code Online (Sandbox Code Playgroud)

app.module.ts:

providers: [
        { provide: ErrorHandler, useClass: IonicErrorHandler },
        AuthService,
        SqlStorage,
        UserSettings,
        Storage
    ]
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Vam*_*nki 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;
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

[来源](https://github.com/driftyco/ionic-conference-app/blob/master/src/pages/account/account.ts)

干杯:)