成功登录后未呈现角度组件

时间:2017-06-30 02:49:37

标签: angular angular-routing angular-components angular-router-guards

菜单组件(只有在成功登录后才能看到)

import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { AuthService } from '../../services/auth.service';

@Component({
  selector: 'app-menu',
  templateUrl: './menu.component.html'
})
export class MenuComponent implements OnInit {

  public isLoggedIn = false;
  constructor(private authService: AuthService, public router: Router) {
    this.isLoggedIn = authService.loggedIn();
  }

  ngOnInit() {
  }
}

菜单组件模板

<nav role="navigation" *ngIf="isLoggedIn">
    <ul><li>Admin Menu Item</li></ul>
</nav>

主要内容组件

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-main-content',
  templateUrl: './main-content.component.html'
})
export class MainContentComponent implements OnInit {

  constructor() { }

  ngOnInit() {
  }

}

主要内容组件模板

<div class="content">
  <div class="wrapper">
    <div class="row">
      <app-menu></app-menu>
    </div>
  </div>
</div>

应用组件模板

我正在考虑使用*ngIf指令来处理菜单组件的可见性,具体取决于用户是否已登录。从上面的代码可以看出,属性isLoggedIn被赋予了来自loggedIn()函数的布尔值。

我认为这一切都非常简单,但问题是菜单组件在成功登录后没有显示,我将不得不刷新浏览器才能看到菜单。不太清楚为什么会出现这种情况。有什么建议或想法吗?

1 个答案:

答案 0 :(得分:0)

这是因为菜单组件中的loggedIn值仅在ngOnInit中设置。

改为使用getter,如下所示:

export class MenuComponent implements OnInit {

  public get loggedIn() { return this.authService.loggedIn(); }
  constructor(private authService: AuthService, public router: Router) {
  }

  ngOnInit() {
  }
}