我有一个angular2导航栏组件,它包括一个注销按钮: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() {
}
}
我期望点击退出按钮时,首先在login服务注销()函数将然后设置localStorage的变量,那么了解它们被执行到登录组件并重新加载页面。
但是我意识到有时页面将在LoginService中执行logout()函数之前被重新加载,所以这不会为localStorage设置新的值。我该如何纠正代码,以便它能够按顺序执行?
谢谢!
我建议你阅读如何处理RxJS和observables,否则你将在Angular中度过难关。这些方法是* asynchronous *,你不能让它逐行运行(就像在observables之前的promise和回调一样)。 – jonrsharpe