2017-06-09 4 views
0

Hallo Ich benutze localStorage in Angular2.Angular2 Versucht, localStorage global zu verwenden, funktioniert aber nicht?

Um zu überprüfen, ob der Benutzer angemeldet ist, ich diesen

 this.currentUser = JSON.parse(localStorage.getItem('currentUser')); 

in jeder Komponente zu nennen versucht, aber da dies sollte in jeder Komponente aufgerufen werden,

Ich beschloss, es mich global machen so Service erstellt

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

import { User } from '../../model/auth_user'; 

import { HttpClient } from '../HttpClient'; 


@Injectable() 
export class LoginCheckService { 

constructor(private http: HttpClient) { } 

LoginCheck(currentUser: User) { 
    currentUser = JSON.parse(localStorage.getItem('currentUser')); //to check if the user is logged in 
    if (currentUser == null) { 
     console.log('hello!') //just to check if the currentUser is null the 'get' method gets called, however, hello! is printed but i can't seem to track any request done. 
     this.http.get('/front/member/session'); 
     } 
    } 
} 

Wie diese und in der Hauptkomponente habe ich dies getan.

currentUser: User; 

    constructor(private auth: AuthenticationService, 
    private router: Router, 
    private loginCheck: LoginCheckService) { 
    this.loginCheck.LoginCheck(this.currentUser); 
    } 

Aber selbst wenn ich angemeldet bin, scheint die von der Hauptcurrent Komponente noch leer zu sein, was vorher nicht der Fall war, als ich mit Service war nicht.

Und ich fügte hinzu wenn if-Anweisung also, wenn der currentUser null ist, muss ich 'get' HTTP-Anfrage senden, aber das wird auch nicht angefordert.

Was mache ich falsch?

Vielen Dank.

(I hinzugefügt Service Provider)

+0

Try 'currentUser' von' LoginCheck' Funktion zurückzukehren und dann lokale Variable Komponente zuweisen 'currentUser' – Ajax

+0

In Ihrem Service LoginCheck, warum brauchen Sie Current Parameter? Du benutzt es nicht. In der nächsten Zeile setzen Sie es mit dem localStorage.getItem. – Hoyen

Antwort

1

Weil du eine Menge Code fehlen.

In Ihrem Dienst haben Sie eine Funktion mit einer currentUser. Dann ändern Sie sofort seinen Wert in Ihren localStorage-Wert (currentUser = JSON.parse(...)).

Das ist alles, was Sie tun. Sie sollten etwas mehr Code hinzufügen, damit es noch mehr tut.

Zum Beispiel:

Komponente

constructor(/* imports */) { 
    this.currentUser = this.loginCheck.LoginCheck(); 
} 

Service

LoginCheck(): any { 
    return JSON.parse(/* your localStorage value */); 
} 
1

Ich habe keinen Platz in Ihrem Code sehen, wo Sie etwas zu Ihrem local Einstellung sind currentUser Parameter.

Gibt Ihr HttpClient.get ein Observable zurück? Wenn dies der Fall ist, müssen Sie sich anmelden, um die http-Anfrage einzuleiten.

this.http.get('/front/member/session').subscribe(result => { 
    // do something with result 
    // save it to localstorage, i guess 
}); 
Verwandte Themen