2017-03-28 30 views
0

我正在創建登錄頁面,數據來自database.i已使用2登錄帳戶。我用一個用戶名登錄,然後在導航欄中顯示用戶名,當我登出並用另一個用戶名登錄時,顯示的是以前的用戶名。當我按F5然後它顯示正確的用戶名,請幫助我,我不想刷新頁面。Navbar在用另一個帳戶登錄後不更新用戶名

在導航欄組件

我在ngOnInit

ngOnInit() { 
     if(this.auth.loggedIn()){ 
      this.auth.getProfile().subscribe(profile=>{ 
       this.user=profile.user; 
      }, 
      err=>{ 
       console.log(err); 
       return false; 
      }); 
     } 
} 

獲取數據這裏的模板

<li *ngIf="auth.loggedIn()"> 
      <a href="#>{{user?.name | uppercase}}</a> 
</li> 
+0

嘗試禁用瀏覽器的緩存和你有任何啓用服務器端緩存? – Sriram

回答

1

您可以直接使用的用戶名從你的身份驗證服務,如果您創建一個變量和事件保存在那裏。 例如,在您的驗證服務

currentUser:any; 
    ... 
    // Your login implementation and save it to this.currentUser 

以前

 <li *ngIf="auth.loggedIn()"> 
      <a href="#>{{user?.name | uppercase}}</a> 
    </li> 

 <li *ngIf="auth.loggedIn()"> 
       <a href="#>{{auth.currentUser?.name | uppercase}}</a> 
     </li> 
+0

謝謝,它的工作.. :) –

+0

@GauravUmrani很高興它幫助你。將此標記爲解決方案,以便其他人可以看到 – brijmcq

0
你面對錯誤

,因爲當你的導航欄組件初始化,它會得到你的用戶信息只有一次,所以當你用另一個賬戶登錄時,「用戶信息」不會改變。

您需要一些如何通知組件更改用戶信息。

我建議創建「EventEmitter像」與子

import { Injectable } from '@angular/core'; 
import { Subject, BehaviorSubject } from "rxjs/Rx"; 

@Injectable() 
export class AuthService { 
    profile$: Subject<any> = new BehaviorSubject<any>({}); 
    constructor() { } 
    emit(value: any) { 
    this.profile$.next(value); 
    } 
    get profile(): BehaviorSubject<any> { 
    return this.profile$ as BehaviorSubject<any>; 
    } 

    login(credential) { 
    // after login successful, for example 
    this.emit({user: yourUserInfoObject}) 
    } 
} 

在你的「導航欄組件」

ngOnInit() { 
    this.auth.profile.subscribe(profile=>{ 
     this.user = profile.user; 
    }, 
    err=>{ 
     console.log(err); 
    }); 
}