Ionic Storage get在不刷新页面的情况下无法工作

4
我试图从存储中获取一个数组,将其保存到MaschinenArray并生成一个ion-list。我的唯一问题是,在“ionic serve”命令后,必须重新加载页面一次,否则会显示Maschinen = null等内容。
我认为这可能是因为该函数是异步的,HTML将在之前加载,但如果我稍后通过按钮触发事件,它仍然会显示null
我在构造函数上面初始化了该数组:
export class MaschinenParkPage {
maschinenArray : Maschine[] = [];

constructor(private menu: MenuController, public alertCtrl: AlertController, public navCtrl: NavController, private storage: Storage) {


    this.storage.get('maschinen').then((buffer) => {

        this.maschinenArray = buffer;
    });

有什么想法吗?或者构造函数可能是初始化某些变量的错误位置吗?

https://ionicframework.com/docs/storage/ - felix9607
在获取内容之前,您需要等待 storage.ready。 - TomG
这没用,我已经试过了。 - felix9607
好的。有点遗憾。但是,你仍然需要相应地编写代码。 - TomG
2个回答

0

你真的需要声明那个数组吗?

如果你已经正确地将它存储在存储器中,你可以检索一个对象数组,如下所示:

export class MaschinenParkPage {
maschinenArray : any;

constructor(private menu: MenuController, public alertCtrl: AlertController, public navCtrl: NavController, private storage: Storage) {


    this.storage.get('maschinen').then((buffer) => {

        this.maschinenArray = buffer;
        console.log(this.maschinenArray);
    });

我已经在我的代码中写了类似的东西,而且完美地运行着。 你可以进入Chrome检查(按下组合键Ctrl+Shift+I),并检查console.log

更新: 还可以进入Chrome检查 -> 应用程序选项卡 -> IndexedDB,查找'maschinen'存储。检查一下。


很遗憾,那并没有帮助。明确一下:如果我调用页面:MaschineParkPage,并且我点击例如记录Array的按钮,则会在控制台中显示“null”。如果我尝试添加一个对象,我会得到错误:无法读取null的属性'push'。似乎只有在我点击F5一次后才初始化了Array,然后一切都正常... - felix9607
在indexeddb中没有“Maschinen”存储。但是在Web SQL部分的_ionickv中,我找到了我的MaschinenArray条目。 - felix9607
@felix9607,是的,它在_ionickv上,请查看我的第二个答案。 - Shashan Sooriyahetti

0

是的,现在我记得问题了。我曾经遇到过类似的问题,我想要登录并根据登录详细信息显示数据。

  1. 首先,我使用了location.reload();这会在登录后重新加载整个应用程序,这不好。

  2. 然后我找到了{{link1:ionic angular中的事件}},解决了我的问题。你可以试试这个。 示例代码如下:

在我的侧边栏控制器中,我订阅它

  this.events.subscribe('user:login', () => {
      this.ngOnInit();
    });

在我的登录控制器中

this.storage.ready().then(() => {
      this.storage.set('loginData', response).then(()=>{
        this.events.publish('user:login');
      });
    });

根据我的代码,在ngOnInit中从存储中检索数据。 希望这可以帮助到您。

我要试一下这个!谢谢你到目前为止的帮助。 - felix9607
location.reload()会导致sqlite cordova插件崩溃。我建议不要使用它(如果你仍在使用)。 - TomG
@TomG 现在我正在使用事件而不是 location.reload()。 - Shashan Sooriyahetti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接