2016-11-21 3 views
0

Я укладывал с Ionic 2 Storage после RC0. Все (instruction).Ионные 2 хранилища возвращается

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

После успешного запуска на эмуляторе я вижу журнал:

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) 

На первом attemption авторизовать я получаю нулевой, но затем я закрываю приложение, убиваю его из диспетчера приложений, запускаю снова и пытаюсь выполнить auth - и получаю сохраненное значение. Но мне все равно нужно войти в систему, потому что Storage потерял мое значение для входа. Что не так?

+0

Вы нашли свое решение все же? –

+0

@behroozdalvandi no, я переехал на родную разработку –

ответ

1

В моем случае это прекрасно работает, вам нужно остаться после того, как хранилище будет готово (тогда).

Пример:

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

Установите плагин Cordova-SQLite-хранения:

cordova plugin add cordova-sqlite-storage --save 

установки "@ ионную/хранения" пакет (опция для ионического 2> = rc.0):

npm install --save @ionic/storage 

Добавьте следующую строку в /src/app/app.module.ts,

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 
] 

Используйте методы set() и get() для хранения и извлечения данных на ваших страницах.

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

Для Разъяснений взглянуть на CodeExpertz

Для видео ссылки на YouTube

0

каждый раз, когда вы видите что-то вроде этого:

myFunction().then(....) 

или

myFunction(callbackFunction()); 

, то myFunction выполняет некоторую асинхронную работу -> поэтому для выполнения этой функции может потребоваться некоторое время. Но JavaScript работает до завершения -> он начинается с вашей первой строки кода и проходит через ваш код -> означает, что браузер не ждет, пока не будет вызван обратный вызов then(). он запустит функцию this.storage.get() и продолжится для вашего console.log. И в какой-то момент this.storage.get() завершил и вызывает обратный вызов вы определили в то() SSO вам нужно использовать так:

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