您好我在Angular2中使用localStorage。
要检查用户是否已登录,我尝试调用此
this.currentUser = JSON.parse(localStorage.getItem('currentUser'));
在每个组件中,但因为这应该在每个组件中调用,
我决定让它全球化,所以我创建了服务
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');
}
}
}
像这样,在主要组件中,我做到了这一点。
currentUser: User;
constructor(private auth: AuthenticationService,
private router: Router,
private loginCheck: LoginCheckService) {
this.loginCheck.LoginCheck(this.currentUser);
}
然而,即使我登录时,来自主要组件的currentUser似乎仍然是空的,这在以前我没有使用服务时没有发生过。
我还添加了if语句,所以如果currentUser为null,我必须发送'get'http请求,但这也不是请求。
我做错了什么?
谢谢。
(我向服务提供商添加了服务)
答案 0 :(得分:1)
因为你缺少很多代码。
在您的服务中,您使用currentUser
创建了一个功能。然后,立即将其值更改为localStorage值(currentUser = JSON.parse(...)
)。
这就是你所做的一切。您应该添加更多代码,以便它可以执行更多操作。
例如:
<强>组件强>
constructor(/* imports */) {
this.currentUser = this.loginCheck.LoginCheck();
}
<强>服务强>
LoginCheck(): any {
return JSON.parse(/* your localStorage value */);
}
答案 1 :(得分:1)
我在代码中没有看到您在localStorage currentUser 参数中设置任何内容的位置。
您的HttpClient.get是否返回Observable?如果是这样,您需要订阅才能发起http请求。
this.http.get('/front/member/session').subscribe(result => {
// do something with result
// save it to localstorage, i guess
});