2017-10-04 3 views
2

Ich versuche ein Array aus dem Speicher "zu holen", speichere es unter MaschinenArray und erstelle eine Ion-Liste. Mein einziges Problem dabei ist, dass ich die Seite nach dem "ionic serve" -Befehl einmal neu laden muss, ansonsten heißt es Maschinen = null als Beispiel.Ionic Storage get funktioniert nicht, bis die Seite neu geladen wird

Ich dachte, es könnte ein Problem sein, wenn diese Funktion async ist und der HTML-Code vorher geladen wird, aber wenn ich das Event später über eine Schaltfläche trigge, heißt es immer noch null.

I inititalize das Array über dem Konstruktor:

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

Irgendwelche Ideen? Oder ist der Konstruktor vielleicht der falsche Ort, um einige Variablen zu initialisieren?

+0

https://ionicframework.com/docs/storage/ – felix9607

+0

müssen Sie auf storage.ready warten, bevor Sie Zeug – TomG

+0

holen hilft nicht, ich habe dies bereits ausprobiert – felix9607

Antwort

0

Müssen Sie dieses Array wirklich deklarieren?

Wenn Sie es richtig im Speicher gespeichert haben, können Sie als Objektarray abrufen,

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

ich schon so etwas wie dies in meinem Code geschrieben haben bereits und arbeitet völlig in Ordnung. Sie können gehen Chrom prüfen (Strg + Scheiße + I) und überprüfen console.log

Update: inspizieren Chrom gehen auch -> Registerkarte Anwendung -> IndexedDB 'Maschinen' Lagerung zu finden. Prüfen Sie.

+0

Das hat leider nicht geholfen. Um es klar zu sagen: Wenn ich die Seite: MaschineParkPage anrufe und ich zum Beispiel auf eine Schaltfläche klicke, meldet sich in der Konsole das Array an, dann heißt es 'null'. Wenn ich versuche, ein Objekt hinzuzufügen, erhalte ich den Fehler: Eigenschaft 'push' von null kann nicht gelesen werden. Es sieht so aus, als ob das Array nicht initialisiert wird, bis ich einmal auf F5 klicke und alles funktioniert ... – felix9607

+0

In indexeddb gibt es keinen "Maschinen" -Speicher. Aber in _ionickv im Bereich Web SQL, wo ich meine MaschinenArray Einträge gefunden habe. – felix9607

+0

@ felix9607 ja ist es auf dem _ionickv und überprüfen Sie meine zweite Antwort. –

0

Yeah jetzt erinnere ich mich an das Problem, denke ich. Ich hatte ein ähnliches Problem, bei dem ich mich anmelden und Daten gemäß den Login-Daten anzeigen wollte.

  1. Zuerst habe ich location.reload(); Das lädt die ganze App nach der Anmeldung neu, was nicht nett ist.

  2. Dann habe ich Events from ionic angular gefunden, die mein Problem gelöst hat. Du kannst es versuchen. Beispielcode ist,

in meiner Sidebar Controller, wo ich es

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

in Anmeldungs ​​Controller

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

nach meinem Code abonnieren i Abrufen von Daten aus dem Speicher in ngOnInit. Hoffe, das hilft.

+0

Ich werde das ausprobieren! Vielen Dank für Ihre Hilfe – felix9607

+0

location.reload() tötet sqlite cordova plugin.Ich schlage vor, es nicht zu verwenden (wenn Sie noch tun) – TomG

+0

@TomG jetzt verwende ich Ereignisse nicht location.reload() –

Verwandte Themen