I have some elements I want on every page except the login page. I'd like to use ngIf or possibly the hidden property of the elements to hide those elements when the user is on the login page.
I have tried this:
<div [hidden]="router.isRouteActive(router.generate('/login'))">
based on this question and answer: In Angular 2 how do you determine the active route?
And have also tried this:
<div *ngIf="!router.isRouteActive(router.generate('/login'))">
but haven't had any success.
For reference here is the component that matches this html.
import { Component, OnInit } from 'node_modules/@angular/core';
import { HTTP_PROVIDERS, XHRBackend } from 'node_modules/@angular/http';
import { Routes, Router, ROUTER_DIRECTIVES } from 'node_modules/@angular/router';
import { LoginService } from './login/login.service';
import { LoginComponent } from './login/login.component';
import { UserComponent } from './user/user.component';
@Component({
selector: 'portal',
templateUrl: 'portal/portal.component.html',
directives: [ROUTER_DIRECTIVES, LoginComponent, UserComponent ],
providers: [
HTTP_PROVIDERS,
LoginService
]
})
@Routes([
{ path: '/login', component: LoginComponent},
{ path: '/user/:username', component: UserComponent}
])
export class PortalComponent implements OnInit{
private router: Router
constructor() {}
ngOnInit() {
this.router.navigate(['/login']);
}
}
The documentation for isRouteActive is pretty slim, the same for generate. Any direction on a better way to achieve this behavior?
I had to do something similar in my code. I did this programmatically by creating the list of routes I wanted to exclude my element from showing in.
In my class, I injected the
Location
object from@angular/common
.Then in my template, I use the
hidden
attribute and bind it to my function.<div id="elementToHide" [hidden]="isHidden()"></div>
RxJS example (Observable):
Based off of @Michelangelo's Comment:
In Your Component:
In HTML:
I would try
router.generate(['/login'])
rather thanrouter.generate('/login')
.This syntax sometimes is tricky.
I hope this helps in your case
You can hide/show elements by checking the url for specific component,
Modify your component.ts file like this,
Use this
hideElement
property in component.htmlThis is what I did for Angular2 RC5 router :
In HTML :
Hope this helps !