2017-03-02 81 views
1
的UserRole什么

是维护全局变量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; 
     }); 
} 

建立userisLoggedIn细节和其他组件访问值....

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 
     ..... 
    } 
    ..... 
} 

ProductsComponentisLoggedIncurrentUser的值是第一次正确,但是当我刷新了浏览器false for isLoggedInnull for user。不知道我在做什么错,在哪里。维护所有组件的用户和登录状态是完全错误的吗?我不想跟sessionStoragelocalStorage一起去。请建议。谢谢。

+1

当你刷新,临时存储(分配)被擦除!所以你不应该刷新你的浏览器!或者你可以选择缓存吧'document.cache' – Smit

+1

@Smit感谢您的信息,我不知道它会删除数据 – user1653027

回答

0

你为什么不使用localStorage的

当你登录你设定的localStorage的

localStorage.setItem('currentUser', JSON.stringify({ email: email, id: id })); 

需要在检查中记录的localStorage的

localStorage.getItem('currentUser') 

和用户的任何组件注销

localStorage.removeItem('currentUser'); 
+1

我从别人知道,有在'sessionStorage'为userDetails或'localStorage'是不是一个最好的方法,所以想用'全局变量'去......我只是提出建议,因为它已经三个星期了,我开始学习Angular2 – user1653027

+0

只是想澄清一下'localStorage'是否有任何我们可以清除'localStorage'每当我们重新启动应用程序? – user1653027

+0

这就是我提到的最后一次调用removeItem的做法 –

0

只需使用您在AppModule提供的服务。它将是一个单例,可在整个应用程序中使用,并且与Angular应用程序具有相同的生命周期。

每个组件,指令,管道和服务可以注入它来访问其状态或订阅它的观测。