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?
What is the difference between [routerLink] and routerLink ? How should you use each one? They're the same directive. You use the first one to pass a dynamic value, and the second one to pass a static path as a string.
We need to import ActivatedRoute and Router module from @angular/router . The object { relativeTo: this. router} ensures that the path remains relative to its parent path.
Yes it can be attached to div tag, your route is probably wrong try add / in front of route.
Routing is a process of changing the state of your Application by loading different components depending upon the URL that the user enters. Angular 2 parses the entered URL by the user and try to identify the routes according the different segments of URL.
Simply check the router.url
in the template:
my.component.ts
...
constructor(public router: Router){}
...
my.component.html
<div *ngIf="router.url != '/login'">
<h2>Not in login!</h2>
</div>
This is what I did for Angular2 RC5 router :
import {Router} from '@angular/router';
public location = '' ;
constructor(private _router : Router)
{
this.location = _router.url;
}
In HTML :
<div *ngIf = "location == '/home' ">
</div>
Hope this helps !
I was able to find the syntax I needed for rc1 buried in a comment here: In Angular 2 how do you determine the active route?
<div *ngIf="!router.urlTree.contains(router.createUrlTree(['/login']))">
You can hide/show elements by checking the url for specific component,
Modify your component.ts file like this,
import { RouterModule, Router, NavigationEnd } from '@angular/router';
hideElement = false;
constructor(private router: Router) {
this.router.events.subscribe((event) => {
if (event instanceof NavigationEnd) {
if (event.url === '/login') {
this.hideElement = true;
} else {
this.hideElement = false;
}
}
});
}
Use this hideElement
property in component.html
<div [hidden]="hideElement">
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With