如何在应用程序首次加载时显示登录组件而不是 Angular 5 中的 appComponent

Zhu*_*Zhu 5 typescript angular2-routing angular-components angular5

我对 Angular 5 完全陌生,我想在应用程序打开时显示登录页面。

现在我显示 appComponent,它有工具栏和侧面导航栏。但是当用户加载应用程序时,如果登录成功,我想显示登录屏幕,那么只有用户应该允许查看主页。

如果我将我的应用程序组件作为登录组件,我无法根据用户的菜单选择在主页中加载不同的组件。

应用程序组件.html

<mat-sidenav-container fullscreen>
    <mat-sidenav #sidenav class="app-sidenav">
        <mat-nav-list>
            <a mat-list-item routerLink="/home" routerLinkActive="active-list-item">
                <h2 matLine>Home</h2>
                <mat-icon matListIcon>home</mat-icon>
            </a>
            <a mat-list-item routerLink="/account" routerLinkActive="active-list-item">
                <h2 matLine>Account</h2>
                <mat-icon matListIcon>person</mat-icon>
            </a>
            <a mat-list-item routerLink="/settings" routerLinkActive="active-list-item">
                <h2 matLine>Settings</h2>
                <mat-icon matListIcon>settings</mat-icon>
            </a>
        </mat-nav-list>
    </mat-sidenav>
    <mat-sidenav-content>
        <mat-toolbar color="primary" class="mat-elevation-z3">
            <button mat-icon-button (click)="sidenav.toggle()">
        <mat-icon>menu</mat-icon>
      </button>
      My App
    </mat-toolbar>
    <div class="app-content">
      <router-outlet></router-outlet>  // router-outlet
    </div>
  </mat-sidenav-content>
</mat-sidenav-container>
Run Code Online (Sandbox Code Playgroud)

目前,当我运行应用程序时,正在加载此页面。我想显示全屏登录页面,而不是首先显示主页。

const  routings: Routes = [
    {path:'',redirectTo:'/app-root',pathMatch:'full'},
    {path:'home',component:HomeComponent},
    {path:'account',component:AccountComponent},
    {path:'settings',component:SettingsComponent},
    {path:'**',redirectTo:'/app-root',pathMatch:'full'},
];
Run Code Online (Sandbox Code Playgroud)

目前,当 url 为 ' ' 且脏时,我重定向到 app-root ,而不是我想重定向到 login 。

谁能帮我解决这个问题。

Ser*_*dar 1

使用警卫将是更有效的解决方案。因为您想要实现的目标是阻止对 AppComponent 的任何匿名调用。

创建一个警卫来检查用户是否经过身份验证。将防护应用到您的 AppComponent。如果用户未经过身份验证,则在您的保护下重定向到您的 LoginComponent。

import { Injectable } from '@angular/core';
import { CanActivate, Router } from '@angular/router';

@Injectable()
export class LoginGuard implements CanActivate {
    constructor(private router: Router) {}

    canActivate() {
        //authentication check logic
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以在 canActivate 函数中实现身份验证检查逻辑。