私はログアウトボタンが含まれて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() {
}
}
何ログアウトボタンをクリックしたときに、私は期待することはまずLoginServiceでログアウト()関数はnagivate、その後、のlocalStorage変数を設定して実行されますされますログインコンポーネントに送信し、ページをリロードします。
しかし私は、LoginServiceでlogout()関数を実行する前にページが再ロードされることがあるので、localStorageに新しい値を設定しません。コードを修正して順番に実行するにはどうすればよいですか?
ありがとうございました!
RxJSとobservablesを扱う方法をお読みになることをお勧めします。そうしないと、Angularで苦労するでしょう。これらのメソッドは*非同期*です。これを行ごとに実行することはできません(オブザーバブルの前の約束とコールバックのように)。 – jonrsharpe