2017-02-12 3 views
-1

Ich setze den Wert des Speichers in ionic. Aber ich kann es nicht abrufen.Ionic2 - Setzen und Abrufen des Werts des Speichers schlägt fehl

Dies ist, was ich

In meinem Login-Dienst Ich habe versucht

in einem anderen Dienst getan haben
this._storage.get('token') 
    .then(res=>{ 
     console.log("in the other area token is"+res)//this is null 

    } 
); 

Ich habe versucht, in einem Konstruktor

@Injectable() 
export class Authservice { 
    storage: Storage; 

    login(user: UserModel): Observable<any> { 
    return this._http.post(this.loginurl + "mobile-login", body) 
    .map((response: Response) => { 
    let token = response.json().access_token; 
    if (token) { 
     console.log(token) //this returns a value of the token 
     this.storage.set('token', token); 

     this.storage.get('token').then((val) => { 
     console.log("token value now is"+val); //this returns nothing 
     }) 
    } else { 
     // return false to indicate failed login 
     return false; 
    } 
    }) 
    //.catch(this.handleError); 
} 

auch den Wert Abrufen so

authtoken:string; 

    constructor(private http: Http, private _storage:Storage) { 
this._storage.get('token') 
    .then(res=>{ 
     this.authtoken= res; 

    } 
); 
    } 

Dann in der Komponente Ich habe versucht

console.log(this.authtoken) //still nothing 

In meiner App-Modul habe ich auch hinzugefügt

providers[Storage] 

Was könnte das Problem sein. Ich teste am Chrome Browser.

Antwort

1

Dies, weil die storage.set ein Versprechen zurückgibt, ist es kein synchroner Prozess.

So, wenn Sie storage.get sofort aufrufen, wurde das Token noch nicht vollständig im Speicher gespeichert, und Sie erhalten nichts.

Sie können ein öffentliches Ereignis erstellen, wenn der Speichersatz erfolgreich ist.

import { BehaviourSubject, Subject } from 'rxjs'; 

tokenEvent: Subject = new BehaviourSubject(null); 

... 

this.storage.set('token', token).then(res => this.tokenEvent.next(true)); 

In anderer Komponente:

constructor(private auth: Authservice){} 
ngOnInit() { 
    this.auth.tokenEvent.subscribe(res => { 
    if (res) { 
     this.this.storage.get('token') 
     .then(token => console.log(token)); 
    } 
    }) 
} 

API Dokument: https://ionicframework.com/docs/v2/storage/

+0

Also meinen Sie, dass der tokenevent auf alle Dienste und Komponenten zur Verfügung stehen wird? –

+0

Wenn Sie mehrere Module haben, so benötigt der AuthService in einem SharedModule, und andere Modul wird dieses SharedModule importieren –

+0

dann alles injizieren AuthService kann auf 'tokenEvent' zugreifen –

Verwandte Themen