Как я могу скрыть панель навигации, если компонент вызывается на всех моих маршрутах (Angular4)
Я знаю, что варианты этого вопроса задавались миллионы раз раньше, но я просто не могу решить мою проблему.
Итак, я делаю сайт для бухгалтерии, и моя проблема в том, что я не могу скрыть верхнюю панель навигации от страницы входа в систему и сохранить ее на всех моих других страницах / маршрутах:
Я вызываю компонент панели навигации в app.component.html, чтобы он отображался на всех моих страницах:
(app.component.html)
<app-navbar>
<router-outlet>
Страница входа имеет простую аутентификацию, так как я все еще делаю шаблон, в конце концов, имя пользователя и пароль будут получены из внутренней базы данных.
Файл страницы входа в систему выглядит так:
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();
}
2 ответа
Вы можете проверить, вошел ли пользователь через ваш getUserLoggedIn
метод:
Сначала нужно ввести UserService
в app.component.ts
:
constructor(public userService: UserService ) { }
Тогда в вашем HTML:
<app-navbar *ngIf="userService.getUserLoggedIn()">
<router-outlet>
Этот путь только тогда, когда isUserLoggedIn
верно, app-navbar
будет показано
То, что вы также можете сделать, это включить ваше меню в компонент приложения (это не проблема) и использовать условие маршрута, чтобы отобразить его или нет.
Для этого angular предоставляет ActivatedRoute для получения информации о текущем URL- адресе маршрута https://angular.io/api/router/ActivatedRoute
- Импортировать ActivatedRoute или Route тоже должно быть хорошо
- Внедрить в компонент
Используя конструктор:
constructor (private activatedRoute: ActivatedRoute / Route) {
this.currentPage = activatedRoute.url;
}
- Затем проверьте информацию о маршруте, как показано ниже.
if (this.curentPage === 'admin') { this.displayMenu = false; }
- Наконец, используйте ваш
<div class="menu" *ngIf="! displayMenu">...</div>