2016-11-21 3 views
0

Ich stapelte mit Ionic 2 Storage nach RC0. Hat alles von instruction.Ionic 2 Speicher kehrt null zurück

login.ts

import { Component } from '@angular/core'; 
import { NavController } from 'ionic-angular'; 
import { Storage } from '@ionic/storage'; 
import {TabsPage} from '../tabs/tabs'; 

@Component({ 
    selector: 'page-login', 
    templateUrl: 'login.html' 
}) 
export class LoginPage { 
    driver: any; 
    phone: any; 

    getPhone(){ 
    return this.storage.get("phone"); 
    }; 

    constructor(private navCtrl: NavController, public storage: Storage) 
    { 
    this.driver = { 
     phone: '', 
     password: '' 
    }; 

     this.getPhone().then(phone => { 
     console.log('RAW_PHONE: ' + phone); 
     this.phone = phone; 
     if (this.phone != undefined || this.phone != null){ 
      console.log('PHONE: ' + this.phone); 
      this.navCtrl.setRoot(TabsPage); 
     } 
     }); 

    } 

feed.ts

import { Component } from '@angular/core'; 
import { Storage } from '@ionic/storage'; 

@Component({ 
    selector: 'page-feed', 
    templateUrl: 'feed.html' 
}) 
export class FeedPage { 
    getTruck(){ 
    return this.storage.get("truck") 
    }; 

    constructor(public storage: Storage) { 
    this.getTruck().then(val => { 
     console.log('SAVED TRUCK: ' + val); 
     }); 
    } 

Nach Erfolg Start am Emulator ich ein Protokoll siehe:

DEVICE READY FIRED AFTER 1467 ms 
Ionic Storage driver: cordovaSQLiteDriver 
RAW_PHONE: null 
Ionic Push: saved push token: cWPGBZzfchU:APA91bE5Rqk-mU4my7Avb689JRaWEA-b0mbkqPPiZui8M4bQR8TDayjwhLrS04Aj4qB9Y3_-IWLy9OoLrGaci5KhRvwgWkE4FZ4eSbgB2qkkql8Nk-oItgdo1ddN9vX_asyfYnys7TiK 
Token saved: cWPGBZzfchU:APA91bE5Rqk-mU4my7Avb689JRaWEA-b0mbkqPPiZui8M4bQR8TDayjwhLrS04Aj4qB9Y3_-IWLy9OoLrGaci5KhRvwgWkE4FZ4eSbgB2qkkql8Nk-oItgdo1ddN9vX_asyfYnys7TiK 
LOGIN RESPONSE: ok 
LOGIN - SAVE PHONE: 55555 
RESPONSE AFTER LOGIN: [object Object] 
TRUCK NUMBER AFTER LOGIN: 3 (it means I successfuly got number and set in storage) 
SAVED TRUCK: null (it means I try to get value from storage) 

Auf den ersten attemption ich null erhalten auth, aber dann schließe ich die App, töte sie vom App-Manager, starte sie erneut und versuche, sich zu authentifizieren - und bekomme einen Wert gespeichert. Aber ich muss mich noch anmelden, da Storage meinen Login-Wert verloren hat. Was ist los?

+0

Haben Sie Ihre Lösung gefunden? –

+0

@ Behroozdalvandi Nein, ich ging auf native Entwicklung –

Antwort

1

In meinem Fall funktioniert das gut, Sie müssen bleiben, nachdem der Speicher bereit ist (dann).

Beispiel:

this.storage.set('forms_data', this.forms_data).then((val) => { 
     this.navCtrl.setRoot(HomePage); 
    }); 
1

Installieren Sie den cordova-SQLite-Speicher Plugin:

cordova plugin add cordova-sqlite-storage --save 

installieren "@ ionische/storage" -Paket (Optional für Ionic 2> = RC.0):

npm install --save @ionic/storage 

die folgende Zeile in /src/app/app.module.ts hinzufügen,

import { Storage } from '@ionic/storage'; 

export function provideStorage() { 
    return new Storage(['sqlite', 'websql', 'indexeddb'], { name: 'database_name' }); 
} 

// Add "Storage" inside providers 
providers: [ 
    { provide: Storage, useFactory: provideStorage }, Storage 
] 

Verwenden Sie die Methoden set() und get() zum Speichern und Abrufen von Daten auf Ihren Seiten.

import { Storage } from '@ionic/storage'; 

export class MyApp { 
    constructor(storage: Storage) { 
    storage.set('key', 'value 1'); // store 
    storage.get('name').then((val) => { // retrive 
     console.log('Your value is', val); 
    }) 
    } 
} 

Für Abklärungen haben einen Blick auf CodeExpertz

Für Video-Referenz bei YouTube

0

jedes Mal, wenn Sie etwas sehen:

myFunction().then(....) 

oder

myFunction(callbackFunction()); 

dann macht myFunction etwas asynchrone Arbeit -> so könnte es einige oder mehr Zeit dauern, um diese Funktion auszuführen. Aber JavaScript läuft zu Ende -> es beginnt in Ihrer ersten Codezeile und geht durch Ihren Code -> bedeutet, dass der Browser nicht wartet, bis der Callback von then() aufgerufen wird. Es startet die Funktion this.storage.get() und geht weiter für Ihre console.log. Und irgendwann this.storage.get() beendet und ruft die Rückruf Sie dann() definiert sso Sie so verwenden müssen:

console.log('Your value is', storage.get('name'));