如果在我的所有路线上都调用了该组件,我该如何隐藏我的导航栏(Angular4)
How can I hide my Navigation Bar if the component is called on all my routes (Angular4)
我知道这个问题的变体已经被问过数百万次,但我似乎无法解决我的问题。
所以我正在制作一个会计网站,我的问题是我似乎无法从登录页面隐藏顶部导航栏并仍然将其保留在我的所有其他页面上 pages/routes:
我在 app.component.html 中调用导航栏组件,因此它显示在我的所有页面上:
(app.component.html)
<app-navbar>
<router-outlet>
登录页面有简单的身份验证,因为我仍在制作模板,最终,用户名和密码将来自后端数据库。
登录页面ts文件如下所示:
export class LoginComponent implements OnInit {
emailFormControl = new FormControl('', [Validators.required,
Validators.pattern(EMAIL_REGEX)]);
UserName = new FormControl('', [Validators.required]);
password = new FormControl('', [Validators.required]);
constructor(private router: Router) { }
ngOnInit() {
}
loginUser(e) {
e.preventDefault();
console.log(e);
const username = e.target.elements[0].value;
const password = e.target.elements[1].value;
if (username === 'admin' && password === 'admin') {
// this.user.setUserLoggedIn();
this.router.navigate(['accounts']);
}
}
}
我还有一个用户服务:
import { Injectable } from '@angular/core';
@Injectable()
export class UserService {
private isUserLoggedIn;
public username;
constructor() {
this.isUserLoggedIn = false;
}
setUserLoggedIn() {
this.isUserLoggedIn = true;
this.username = 'admin';
}
getUserLoggedIn() {
return this.isUserLoggedIn;
}
}
我已经看到有关 Auth 等的答案,但我似乎无法围绕我的代码塑造答案。
如何隐藏登录页面的导航栏?
我将不胜感激任何帮助。谢谢
编辑
这是 Dhyey 要求的路由文件:
import {RouterModule, Routes} from '@angular/router';
import {NgModule} from '@angular/core';
import { LoginComponent } from './login/login.component';
import { AdminComponent } from './Components/admin/admin.component';
import { AccountsComponent } from './Components/accounts/accounts.component';
import { MappingComponent } from './Components/mapping/mapping.component';
const appRoutes: Routes = [
{ path: '',
pathMatch: 'full',
redirectTo: 'login' },
{
path: 'login',
component: LoginComponent
},
{
path: 'admin',
component: AdminComponent
},
{
path: 'accounts',
component: AccountsComponent
},
{
path: 'mapping',
component: MappingComponent
},
];
@NgModule({
imports: [
RouterModule.forRoot(appRoutes)
],
exports: [
RouterModule
]
})
export class AppRoutingModule {}
// export const routingComponents = [MappingComponent, AccountsComponent, AdminComponent, LoginComponent];
编辑 2
这是 app.component.ts 文件
import { Component } from '@angular/core';
import {FormControl} from '@angular/forms';
import {HttpModule} from '@angular/http';
import { UserService } from './services/user.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.sass']
})
export class AppComponent {
title = 'app';
myControl: FormControl = new FormControl();
}
您可以通过您的 getUserLoggedIn
方法检查用户是否登录:
首先你需要在app.component.ts
中注入UserService
:
constructor(public userService: UserService ) { }
然后在你的 html:
<app-navbar *ngIf="userService.getUserLoggedIn()">
<router-outlet>
这样只有当isUserLoggedIn
为真时,才会显示app-navbar
你也可以把你的menu放在app组件里(这个不是问题),用路由条件来决定是否显示。
为此,angular 提供 ActivatedRoute 从当前路线获取信息 url https://angular.io/api/router/ActivatedRoute
- 导入 ActivatedRoute 或 Route 也应该没问题
- 注入组件
使用构造函数:
constructor (private activatedRoute: ActivatedRoute / Route) {
this.currentPage = activatedRoute.url;
}
- 然后检查 onInit 如下所示的路由信息
if (this.curentPage === 'admin') { this.displayMenu = false; }
- 最后,使用你的
<div class="menu" *ngIf="! displayMenu">...</div>
我知道这个问题的变体已经被问过数百万次,但我似乎无法解决我的问题。
所以我正在制作一个会计网站,我的问题是我似乎无法从登录页面隐藏顶部导航栏并仍然将其保留在我的所有其他页面上 pages/routes:
我在 app.component.html 中调用导航栏组件,因此它显示在我的所有页面上:
(app.component.html)
<app-navbar>
<router-outlet>
登录页面有简单的身份验证,因为我仍在制作模板,最终,用户名和密码将来自后端数据库。
登录页面ts文件如下所示:
export class LoginComponent implements OnInit {
emailFormControl = new FormControl('', [Validators.required,
Validators.pattern(EMAIL_REGEX)]);
UserName = new FormControl('', [Validators.required]);
password = new FormControl('', [Validators.required]);
constructor(private router: Router) { }
ngOnInit() {
}
loginUser(e) {
e.preventDefault();
console.log(e);
const username = e.target.elements[0].value;
const password = e.target.elements[1].value;
if (username === 'admin' && password === 'admin') {
// this.user.setUserLoggedIn();
this.router.navigate(['accounts']);
}
}
}
我还有一个用户服务:
import { Injectable } from '@angular/core';
@Injectable()
export class UserService {
private isUserLoggedIn;
public username;
constructor() {
this.isUserLoggedIn = false;
}
setUserLoggedIn() {
this.isUserLoggedIn = true;
this.username = 'admin';
}
getUserLoggedIn() {
return this.isUserLoggedIn;
}
}
我已经看到有关 Auth 等的答案,但我似乎无法围绕我的代码塑造答案。
如何隐藏登录页面的导航栏?
我将不胜感激任何帮助。谢谢
编辑
这是 Dhyey 要求的路由文件:
import {RouterModule, Routes} from '@angular/router';
import {NgModule} from '@angular/core';
import { LoginComponent } from './login/login.component';
import { AdminComponent } from './Components/admin/admin.component';
import { AccountsComponent } from './Components/accounts/accounts.component';
import { MappingComponent } from './Components/mapping/mapping.component';
const appRoutes: Routes = [
{ path: '',
pathMatch: 'full',
redirectTo: 'login' },
{
path: 'login',
component: LoginComponent
},
{
path: 'admin',
component: AdminComponent
},
{
path: 'accounts',
component: AccountsComponent
},
{
path: 'mapping',
component: MappingComponent
},
];
@NgModule({
imports: [
RouterModule.forRoot(appRoutes)
],
exports: [
RouterModule
]
})
export class AppRoutingModule {}
// export const routingComponents = [MappingComponent, AccountsComponent, AdminComponent, LoginComponent];
编辑 2 这是 app.component.ts 文件
import { Component } from '@angular/core';
import {FormControl} from '@angular/forms';
import {HttpModule} from '@angular/http';
import { UserService } from './services/user.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.sass']
})
export class AppComponent {
title = 'app';
myControl: FormControl = new FormControl();
}
您可以通过您的 getUserLoggedIn
方法检查用户是否登录:
首先你需要在app.component.ts
中注入UserService
:
constructor(public userService: UserService ) { }
然后在你的 html:
<app-navbar *ngIf="userService.getUserLoggedIn()">
<router-outlet>
这样只有当isUserLoggedIn
为真时,才会显示app-navbar
你也可以把你的menu放在app组件里(这个不是问题),用路由条件来决定是否显示。
为此,angular 提供 ActivatedRoute 从当前路线获取信息 url https://angular.io/api/router/ActivatedRoute
- 导入 ActivatedRoute 或 Route 也应该没问题
- 注入组件
使用构造函数:
constructor (private activatedRoute: ActivatedRoute / Route) {
this.currentPage = activatedRoute.url;
}
- 然后检查 onInit 如下所示的路由信息
if (this.curentPage === 'admin') { this.displayMenu = false; }
- 最后,使用你的
<div class="menu" *ngIf="! displayMenu">...</div>