【发布时间】:2017-09-11 20:34:12
【问题描述】:
我有一个 angular2 导航栏组件,其中包括一个注销按钮:
import { Component, OnInit } from '@angular/core';
import { LoginService } from '../login.service';
import { Router } from '@angular/router';
@Component({
selector: 'app-navbar',
templateUrl: './navbar.component.html',
styleUrls: ['./navbar.component.css']
})
export class NavbarComponent implements OnInit {
loggedIn: boolean;
constructor(private loginService: LoginService, private router : Router) {
if(localStorage.getItem('PortalAdminHasLoggedIn') == '') {
this.loggedIn = false;
} else {
this.loggedIn = true;
}
}
logout(){
this.loginService.logout().subscribe(
res => {
localStorage.setItem('PortalAdminHasLoggedIn', '');
},
err => console.log(err)
);
this.router.navigate(['/login']);
location.reload();
}
getDisplay() {
if(!this.loggedIn){
return "none";
} else {
return "";
}
}
ngOnInit() {
}
}
单击注销按钮时,我期望首先执行 LoginService 中的 logout() 函数,然后设置 localStorage 变量,然后导航到登录组件并重新加载页面。
但我意识到有时页面会在 LoginService 中执行 logout() 函数之前重新加载,因此这不会为 localStorage 设置新值。如何更正代码以便按顺序执行?
谢谢!
【问题讨论】:
-
我建议您阅读有关如何处理 RxJS 和 observables 的内容,否则您将在 Angular 中遇到困难。这些方法是异步的,你不能让它逐行运行(就像在可观察对象之前的承诺和回调一样)。
标签: angular typescript