我想显示登录|登录用户基础上的注销链接 . 我在auth.service中的'm saving ' currentUser'对象: localStorage.setItem('currentUser', JSON.stringify(user));

当我尝试在navbar.component.ts中 console.log('navbar.component',this.currentUser); 时,它显示 null ,但是当它在home.component中控制它时,它显示我的用户,home.component受到使用auth guard的保护,请查看我的代码并建议一些好的解决方案

角度版本: 4.0.2

目录结构:

quickstart
 -src
   --app
       --_guards
       _services
       --navbar
           navbar.component.ts
       --home
         home.component.ts
      --login
         login.component
   app.component.ts
   app.component.html 
   app-routing.module.ts

navbar.component.ts

@Component({
    selector: 'navbar',
    templateUrl: './navbar.component.html'
})

export class NavbarComponent implements OnInit{
    private projectName;
    private currentUser: any;
    constructor(){this.projectName = 'Web Shop Admin';}
    ngOnInit(){
        this.currentUser = JSON.parse(localStorage.getItem('currentUser'));
        console.log('navbar.component',this.currentUser);
        // null in console
    }
}

navbar.component.html

<ul *ngIf="currentUser !== null " class="navbar-nav ml-auto" >
     <li class="nav-item"><a class="nav-link">Welcome {{currentUser.name}}</a></li>

     <li class="nav-item"><a class="nav-link" [routerLink]="['/login']">(Logout)</a></li>
  </ul>

home.component.ts

@Component({
    templateUrl: './home.component.html'
})
export class HomeComponent implements OnInit{
    currentUser: any;
    ngOnInit(){
        this.currentUser = JSON.parse(localStorage.getItem('currentUser'));
        console.log('home.component',this.currentUser);
       //display me the current user
    }
}

app.component.ts

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html'
})
export class AppComponent  { 
    private currentUser: any;
    constructor(){
         this.currentUser = JSON.parse(localStorage.getItem('currentUser'));
        //display me the current user
    }
}

app.component.html

<navbar></navbar>

<alert></alert>

<router-outlet></router-outlet>

<footer class="container-fluid">
    <p class="text-center small">©2016-2017 Company</p>
</footer>

APP-routing.module.ts

...
export const routes: Routes = [
    {path:'', redirectTo:'/home', pathMatch:'full'},
    {path:'home', component: HomeComponent, canActivate: [AuthGuard]},
    {path:'login', component: LoginComponent },
    {path:'category', component:CategoryComponent, canActivate:[AuthGuard]},
    {path:'product', component:ProductComponent, canActivate:[AuthGuard]},
    {path:'**', redirectTo:''}
]
....