是維護全局變量angular2
的最佳途徑。我無法找到一種通過應用程序來維護全局變量的方法。用戶登錄到應用程序後,我需要User
對象,它在所有其他組件的用戶資料和isLoggedIn
值。下面是我在做什麼...角2個像isLoggedIn全局變量或
@Injectable()
export class AppGlobals {
public isUserLoggedIn: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
public currentUser: BehaviorSubject<User> = new BehaviorSubject<User>(null);
setLoginStatus(isLoggedIn) {
this.isUserLoggedIn.next(isLoggedIn);
}
setCurrentUser(currentUser) {
this.currentUser.next(currentUser);
}
}
在loginComponent我在成功登錄
login() {
this.authenticationService.login(this.model.username, this.model.password)
.subscribe(
data => {
this.appGlobals.setLoginStatus(true);
this.appGlobals.setCurrentUser(data);
this.router.navigate([this.returnUrl]);
},
error => {
this.alertService.error(error);
this.loading = false;
});
}
建立user
和isLoggedIn
細節和其他組件訪問值....
export class ProductsComponent {
currentUser: User;
isLoggedIn: boolean;
constructor(private productService: ProductService, private router:Router,
private confirmationService: ConfirmationService,
private auth: AuthenticationService,
private appGlobal: AppGlobals) {
appGlobal.isUserLoggedIn.subscribe(value => {this.isLoggedIn = value; console.log(value);}); // should be true
appGlobal.currentUser.subscribe(value => {console.log(value); this.userRole = value}); // should have user data
.....
}
.....
}
在ProductsComponent
isLoggedIn
和currentUser
的值是第一次正確,但是當我刷新了瀏覽器false for isLoggedIn
和null for user
。不知道我在做什麼錯,在哪裏。維護所有組件的用戶和登錄狀態是完全錯誤的嗎?我不想跟sessionStorage
或localStorage
一起去。請建議。謝謝。
當你刷新,臨時存儲(分配)被擦除!所以你不應該刷新你的瀏覽器!或者你可以選擇緩存吧'document.cache' – Smit
@Smit感謝您的信息,我不知道它會刪除數據 – user1653027