我有这个问题无法解决。我想改变" LOGIN"将我的标题组件中的文本转换为" LOGOUT"使用令牌成功登录后的文本。
login () {
if(this.loginForm.valid){
this.authenticationService.login(this.loginForm.value.username,this.loginForm.value.password)
.subscribe(
data => {
this.showError = false;
this.router.navigate(['']);
}
}
}
在我的AuthenticationService中,我有这个功能" isLoggedIn()"其中检查是否有已保存的令牌:
login(username,password){
let headers = new Headers();
headers.append('Content-Type','application/json');
return this.http.post(this.configEnvironment.url() + "oauth/access_token",
JSON.stringify(
{
username: username,
password: password,
grant_type: "password",
client_id: "xx",
client_secret: "xx"
}
),
{ headers }
)
.map(res => res.json())
.map(res => {
localStorage.setItem("access_token",res.access_token);
localStorage.setItem("refresh_token",res.refresh_token);
this.loggedIn = true;
})
.catch((err:Response) => {
let error = {};
error["message"] = err.json();
error["status"] = err.status;
return Observable.throw(error);
});
}
isLoggedIn() {
return this.loggedIn;
}
现在,在构造函数的头部分中,我调用的是AuthenticationService中的isLoggedIn函数:
this.isLoggedIn = this.authenticationService.isLoggedIn();
<ul class="nav navbar-nav navbar-right" *ngIf="!isLoggedIn">
<li><a [routerLink]="['/login']">Log in</a></li>
<li><a [routerLink]="['/signup']" class="btn btn--red">Sign up</a></li>
</ul>
<ul class="nav navbar-nav navbar-right" *ngIf="isLoggedIn">
<li><a (click)="logout()">Logout</a></li>
</ul>
我的问题是,当LoginComponent重定向后,当isLoggedIn值发生变化时,HeaderComponent不会监听。