Angular is a popular front-end framework made by Google. Like other popular front-end frameworks, it uses a component-based architecture to structure apps.
In this article, we’ll look at how to add routing to our Angular app.
Setting up Redirects
We can set up redirects within our Angular app with the redirectTo
property.
For example, we can write:
app-routing.module.ts
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { FirstComponent } from './first/first.component';
import { PageNotFoundComponent } from './page-not-found/page-not-found.component';
import { SecondComponent } from './second/second.component';
const routes: Routes = [
{ path: 'first-component', component: FirstComponent },
{ path: 'second-component', component: SecondComponent },
{ path: '', redirectTo: '/first-component', pathMatch: 'full' },
{ path: '**', component: PageNotFoundComponent },
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
If we go to the /
path, we go to the /first-component
path because of the redirectTo
property.
The pathMatch
property is set to 'full'
so the full path has to be matched before the redirect is done.
Nesting Routes
We can add nested routes by adding the children
property.
For example, we can write:
app-routing.module.ts
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { ChildAComponent } from './child-a/child-a.component';
import { ChildBComponent } from './child-b/child-b.component';
import { FirstComponent } from './first/first.component';
import { PageNotFoundComponent } from './page-not-found/page-not-found.component';
import { SecondComponent } from './second/second.component';
const routes: Routes = [
{
path: 'first-component', component: FirstComponent, children: [
{
path: 'child-a',
component: ChildAComponent,
},
{
path: 'child-b',
component: ChildBComponent,
},
],
},
{ path: 'second-component', component: SecondComponent },
{ path: '', redirectTo: '/first-component', pathMatch: 'full' },
{ path: '**', component: PageNotFoundComponent },
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
to add the child routes with the children
property.
Then in first.component.html
, we add:
<p>first works!</p>
<router-outlet></router-outlet>
so that we can see the child routes.
Now when we go to /first-component/child-a
, we get:
first works!
child-a works!
And if we go to /first-component/child-b
, we get:
first works!
child-b works!
Using Relative Paths
We can define relative paths in our router links.
For example, we can write:
child-a.component.html
<nav>
<ul>
<li><a routerLink="../child-b">child b</a></li>
</ul>
</nav>
<p>child-a works!</p>
Then the link will go to the /first-component/child-b
path.
We can also do this programmatically.
For example, we can write:
child-a.component.html
<button (click)='goToChildB()'>child-b</button>
<p>child-a works!</p>
child-a.component.ts
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
@Component({
selector: 'app-child-a',
templateUrl: './child-a.component.html',
styleUrls: ['./child-a.component.css']
})
export class ChildAComponent implements OnInit {
constructor(
private router: Router,
private route: ActivatedRoute
) { }
ngOnInit() {
}
goToChildB() {
this.router.navigate(['../child-b'], { relativeTo: this.route });
}
}
We call goToChildB
when we click on the child-b button.
In goToChildB
, we call this.router.navigate
to go to the ../child-b
route.
The relativeTo
property sets the path that the relative path is relative to.
Conclusion
We can go to a relative path with Angular’s router.
Also, we can set up redirects to go to a path.