【问题标题】:Delay in retrieving data from Ionic 2 storage从 Ionic 2 存储中检索数据的延迟
【发布时间】:2017-07-24 20:04:07
【问题描述】:

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

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

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

提前致谢。

【问题讨论】:

  • 尽可能提供一些关于如何使用 sqlite 插件的代码
  • 如果没有您的代码中的代码示例,则无法查明问题。 :)

标签: ionic2 local-storage


【解决方案1】:

问题已解决

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)

干杯:)

【讨论】:

    【解决方案2】:

    正如您所指出的,您的代码在 Chrome 中运行,但在您的设备上却没有,您可能会在 cordova 的 device.ready() 触发之前调用 sqlite。

    在 app.component.ts 中确保您以下列方式调用 this.loadUser():
    (platform.ready() 应该已经在构造函数中)

     platform.ready().then(() => {
          this.loadUser();
        });
    

    【讨论】:

    • 我也是这样,这是我的 app.component.ts platform.ready().then(() => { // 好的,平台已经准备好了,我们的插件也准备好了available. // 在这里你可以做任何你可能需要的更高级别的原生操作。StatusBar.styleDefault(); Splashscreen.hide(); storage.ready().then(() => { console.log('Storage ready . ..'); this.userSettings.initStorage().then(() => { this.loadUser(); }); }); });
    猜你喜欢
    • 2021-10-19
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多