2016-04-18 74 views
3

我無法使本地存儲正常工作。當我這樣做:離子2本地存儲未按預期工作

this.VEEU_ID = 'veeuID'; 
 
this.storage.set(this.VEEU_ID, 11); 
 
alert('Storage was set to: '+JSON.stringify(this.storage.get(this.VEEU_ID)));

我得到:

Storage was set to: {"_id":1733,"_state":1,"_result":"11","_subscribers":[]}

我認爲this.storage.get(this.VEEU_ID)應返回的值11

+0

你試過了'this.storage.set('veeuID',11)); alert('Storage was set to:'+ JSON.stringify(this.storage.get('veeuID'))); ' – Akis

+1

是的。看起來你不能只是調用.get你必須使用一個承諾。 –

+1

是的,這裏有一個很好的例子http://www.joshmorony.com/build-a-todo-app-from-scratch-with-ionic-2-video-tutorial/ – Akis

回答

9

從存儲中獲取數據是異步的,這意味着我們的應用程序將在數據加載時繼續運行。允諾讓我們來執行一些動作,當數據加載完成後,無需暫停整個應用程序

所以這樣一個例子應該是:

//set a value in storage 
this.storage.set("age", 25); 

//get the value from storage 
this.storage.get("age").then((value) => { 
    alert('Storage value: '+ value); 
}) 

更多信息可以在找到SqlStorage API page

更新離子2 RC

由於離子2 RC的發佈一些變化了地點:

存儲已從離子角度移除並置於單獨的模塊@ ionic/storage中。已經更新Starter以添加此內容,如果您使用的是存儲系統,請確保將其添加到您的package.json中。在這裏看到更多細節。

下面的例子演示瞭如何離子2儲存:

首先我們編輯位於src/app/app.module.tsNgModule。最重要的部分是添加Storage作爲供應商:

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

@NgModule({ 
    declarations: [ 
    ... 
    ], 
    imports: [ 
    IonicModule.forRoot(MyApp) 
    ], 
    bootstrap: [IonicApp], 
    entryComponents: [ 
    ... 
    ], 
    providers: [ Storage ] // Make sure you do that! 
}) 
export class AppModule {} 

現在我們可以注入Storage到我們的組件:

import { Component } from '@angular/core'; 

import { NavController } from 'ionic-angular'; 

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

@Component({ 
    selector: 'page-home', 
    templateUrl: 'home.html' 
}) 
export class HomePage { 

    constructor(public navCtrl: NavController, public storage: Storage) { 

    } 

} 

注入寄存到組件後,我們可以使用storage.setstorage.get方法:

this.storage.set('name', 'John').then(() => { 
    console.log('Name has been set'); 
}); 

this.storage.get('name').then((name) => { 
    console.log('Name: ' + name); 
}); 
+0

和如何賦值給外部變量? –

+0

假設在樣本類別中: 'public key:any = null; 公共存儲:...; (this.key); //將顯示該值(012) } console.log(this.key); //將顯示null }' 爲什麼?我研究了承諾但我不明白爲什麼它不會初始化整個類中的公共變量? –