2016-04-14 29 views
1

我有MainMenuComponent帶有一些導航鏈接。 部分鏈接適用於簽名會員,部分適用於客人,部分適用於所有人。Angular 2 - 服務中的組件變量在視圖中沒有更改

我的主模板(master.html)看起來是這樣的:

<main-menu></main-menu> 

<div class="container"> 
<router-outlet></router-outlet> 
</div> 

router-outlet裏面,我有一個login component。當我登錄時,我將我的JwtService.jwtToken變量更改爲用戶令牌。 (服務變量)

這意味着,登錄後,我仍然可以看到「登錄」和「註冊」菜單鏈接:

<li *ngIf="!JwtService.getToken()" [class.active]="isRouteActive(['/Login'])"><a [routerLink]="['Login']">Login</a></li> 
     <li *ngIf="!JwtService.getToken()" [class.active]="isRouteActive(['/Register'])"><a [routerLink]="['Register']">Register</a></li> 
     <li *ngIf="JwtService.getToken()" [class.active]="isRouteActive(['/Fight'])"><a [routerLink]="['Fight']">Fight</a></li> 
     <li *ngIf="JwtService.getToken()"><a (click)="logOut()">Log Out</a></li> 

爲什麼JwtService.getToken()是改變了我的<router-outlet>但在它之外,在我的主菜單組件中,它沒有更新? (除非我刷新手動頁面)

**換句話說:當我的服務變量是使用jwtService.setToken("MY_TOKEN"); 登錄後改變,我認爲下面的表達式沒有改變:

JwtService.getToken() 

,它仍然空直到我刷新我的瀏覽器/路由**

+0

這並不是很多的信息,你的應用程序正在發生什麼。你可以創建一個重擊者嗎? –

+0

我的應用程序真的很大,我的問題有很多不相關的代碼部分。請讓我知道需要哪些信息來解決這個問題或獲得有關它的一般知識。我更新了我的帖子以獲取更多詳情。 – TheUnreal

回答

0

我與在區域和更改檢測策略引起的Angular2中router-outlet以外的組件相同的問題。

您可以使用ApplicationRef.tick()方法強制Angular2檢查完整的組件樹。

在你login組件:

參考加入ApplicationRef

import {ApplicationRef} from 'angular2/core'; 

注入ApplicationRef到構造:

constructor(public appRef: ApplicationRef) 

那麼當您收到來自認證服務力響應Angular2應用程序再次通過變更檢測:

this.appRef.tick(); // this will refresh the bindings 

您的main-menu組件應按預期更新。

+0

仍不更新 – TheUnreal

+0

您能否粘貼以下代碼:main-menu組件,JwtService和主引導組件? – kbugala

相關問題