我在角度第一个菜单第二个标题中创建了4个组件,第三个是主页,第四个是登录组件,在菜单组件中我使用material ui创建了sidbarnvbar,在登录组件中我创建了登录页面。当我做 ng 服务时,我的菜单组件显示了登录组件,但我只想在页面重定向时在第一页上显示登录组件,我设置了登录路由及其出现在第一页上,但问题是它带有菜单栏内容你可以在图片中看到, 我已经写在 app.component.html 中,因为我想在登录后,当我单击侧边栏任何按钮时,其他组件数据应该出现
这是我的菜单栏和所有组件代码
type here<mat-toolbar color="primary">
<button (click)="drawer.toggle()" mat-icon-button>
<mat-icon>menu</mat-icon>
</button>
<span>Angular</span>
<span class="example-spacer"></span>
<button routerLink="header" mat-button>home</button>
<button routerLink="sidebar" mat-button>About</button>
<button mat-button>contact</button>
<form class="d-flex">
<input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
<button class="btn btn-success" type="submit">Search</button>
</form>
</mat-toolbar>
<mat-drawer-container autosize>
<mat-drawer #drawer opened="true" mode="side" position="start">
<mat-nav-list>
<mat-list-item>
<button routerLink="header" mat-button><mat-icon>home</mat-icon> Home</button>
</mat-list-item>
<mat-list-item>
<button routerLink="home" mat-button><mat-icon>home</mat-icon> Pages</button>
</mat-list-item>
<mat-list-item>
<button routerLink="" mat-button><mat-icon>explore</mat-icon> Table</button>
</mat-list-item>
<mat-list-item>
<button routerLink="#" mat-button><mat-icon>Layout</mat-icon> Layout</button>
</mat-list-item>
<mat-list-item>
<button mat-button><mat-icon>settings</mat-icon> Settings</button>
</mat-list-item>
<mat-list-item>
<button mat-button><mat-icon>help</mat-icon> Help</button>
</mat-list-item>
</mat-nav-list>
</mat-drawer>
<mat-drawer-content>
<div style="text-align: center;min-height: 600px;">
<router-outlet></router-outlet>
</div>
</mat-drawer-content>
</mat-drawer-container>
登录组件
<body>
<form [formGroup] ="loginform1" (ngSubmit)="loginUser()">
<div class="login-container">
<h2 class="lg">Login Page</h2>
<label>User Name</label>
<input type="text" name="Uname" id="Uname" placeholder="Username" formControlName="Uname">
<span style="color: red;" *ngIf="Uname && Uname.invalid && Uname.touched" >this field is required.</span>
<br><br>
<label>Password</label>
<input type="password" name="password" id="Pass" placeholder="Password" formControlName="password">
<span style="color: red;" *ngIf="password && password.invalid && password.touched" >this field is required.</span>
<br>
<a href="#" style="color: white;">Forgot Password</a><br><br>
<button class="bt" (click)="submit()" [disabled]="loginform1.invalid">Login</button> <br><br>
<input type="checkbox" id="check">
<span>Remember me</span><br>
<button type="type" class="btn btn-primary" routerLink="/dashboard">Register</button>
<br><br>
</div>
</form>
</body>
app.component.html
<app-menu></app-menu>
应用程序路由
{path:'dashboard', component:DashboardComponent},
{path:'header', component:Headers},
{path:'home', component:HomeComponent},
{path:'menu', component:MenuComponent},
{path:'login',component:LoginComponent},
{ path: '', redirectTo: '/login', pathMatch: 'full' },
我希望当我运行 ng 服务时,只应该出现登录页面,并且在侧边栏和 nvbar 中,所有按钮都应该与路由器链接一起使用
无论您的路径是什么,Angular 将始终显示
AppComponent
。它是您应用程序的前门(查看您的 index.html
文件,应用程序组件是 body
的直接子级,您不能更改它。)。
无论您的路径是什么,Angular 都会根据您的应用程序路由将
<router-outlet></router-outlet>
的出现替换为好的对象。
因此,在您的情况下,当您的路径为
login
时,这些是 HTML 生成的 3 个步骤:
您可以使用应用程序模板生成最终的 HTML 文件
app.component.html
。在此模板中引用了您的 MenuComponent
:<app-menu></app-menu>
。
您可以使用菜单模板
menu.component.html
生成 HTML 行。这些生成的 HTML 行将替换最终 HTML 文件中的 <app-menu></app-menu>
。在这些行中,有一个由您的应用程序路由管理的其他引用:<router-outlet></router-outlet>
。
根据您的应用程序路由,路径
login
使用组件LoginComponent
。因此,您可以使用登录模板 login.component.html
生成 HTML 行。这些生成的 HTML 行将替换最终 HTML 文件中的 <router-outlet></router-outlet>
。
最后,预期的结果是应用程序模板内的菜单模板内的登录模板。
解决方案
从当前代码中仅将登录模板放在路径
/login
上的最短方法是更改您的 AppComponent
,以便当您位于路径 MenuComponent
上时直接放置登录组件,而不使用 /login
。
在
app.component.ts
中,声明一个变量,让您知道自己处于哪种情况:
export class AppComponent {
public isLoginPath: boolean = this.route.url === "/login";
constructor(private route: Router) { }
}
在您的
app.component.html
中,使用此变量来选择良好行为:
<app-menu *ngIf="!isLoginPath"></app-menu>
<router-outlet *ngIf="isLoginPath"></router-outlet>
(并删除
<body>
中的 login.component.html
,您已经封装在 body 元素中,因为登录组件位于应用程序组件内,而应用程序组件位于 index.html
的主体内)