Module
A module is a container for a group of related components, directives, pipes, and services. It is used to organize an Angular application into cohesive blocks of functionality.
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
@NgModule({
imports: [BrowserModule, FormsModule],
declarations: [AppComponent],
bootstrap: [AppComponent],
})
export class AppModule {}
Lazy loading
Lazy loading is a technique used to load modules only when they are needed. This can help reduce the initial load time of the application by loading only the necessary modules.
Example of lazy loading in non standalone components:
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
@NgModule({
imports: [BrowserModule, FormsModule, AppRoutingModule],
declarations: [AppComponent],
bootstrap: [AppComponent],
})
export class AppModule {}
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
const routes: Routes = [
{
path: 'page-1',
loadChildren: () =>
import('./page-1/page-1.module').then((m) => m.Page1Module),
},
{
path: 'page-2',
loadChildren: () =>
import('./page-2/page-2.module').then((m) => m.Page2Module),
},
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
})
export class AppRoutingModule {}
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { Page1Component } from './page-1.component';
const routes: Routes = [
{
path: '',
component: Page1Component,
},
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
})
export class Page1RoutingModule {}
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { Page1Component } from './page-1.component';
import { Page1RoutingModule } from './page-1-routing.module';
@NgModule({
imports: [CommonModule, Page1RoutingModule],
declarations: [Page1Component],
})
export class Page1Module {}
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { Page2Component } from './page-2.component';
const routes: Routes = [
{
path: '',
component: Page2Component,
},
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
})
export class Page2RoutingModule {}
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { Page2Component } from './page-2.component';
import { Page2RoutingModule } from './page-2-routing.module';
@NgModule({
imports: [CommonModule, Page2RoutingModule],
declarations: [Page2Component],
})
export class Page2Module {}
<h1>Lazy Loading Example</h1>
<a routerLink="page-1">Page-1</a>
<a routerLink="page-2">Page-2</a>
<router-outlet></router-outlet>
Example of lazy loading in standalone components:
import { Routes } from '@angular/router';
export const routes: Routes = [
{
path: 'page-1',
loadComponent: () => import('./page-1/page-1.component').then((m) => m.Page1Component),
},
{
path: 'page-2',
loadComponent: () => import('./page-2/page-2.component').then((m) => m.Page2Component),
}
];
import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
import { provideRouter } from '@angular/router';
import { routes } from './app.routes';
export const appConfig: ApplicationConfig = {
providers: [
provideZoneChangeDetection({ eventCoalescing: true }),
provideRouter(routes)
],
};
import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router';
@Component({
selector: 'app-root',
standalone: true,
imports: [RouterOutlet],
templateUrl: './app.component.html',
styleUrl: './app.component.scss'
})
export class AppComponent {
// component logic here
}
<h1>Lazy Loading Example</h1>
<a routerLink="page-1">Page-1</a>
<a routerLink="page-2">Page-2</a>
<router-outlet></router-outlet>
Router
The Angular Router is a powerful tool that allows you to define navigation paths and routes in your application. It enables you to navigate between different components and views based on the URL path.
Example of routing in Angular non standalone components:
// app.module.ts
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
const routes: Routes = [
// Define your routes here
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
Required Route Params
To define a route with a required parameter, you can use a colon (:
) followed by the parameter name. For example, in app.module.ts
:
// app.module.ts
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { UserDetailsComponent } from './user-details/user-details.component';
const routes: Routes = [
{ path: 'user/:id', component: UserDetailsComponent },
// Other routes...
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
Navigating in the App
To navigate to a route with a required parameter, you can use the Router
service. For example, in a component:
// some-component.component.ts
import { Router } from '@angular/router';
export class SomeComponent {
constructor(private router: Router) {}
navigateToUserDetails(userId: number): void {
this.router.navigate(['/user', userId]);
}
}
Optional Route Params
To define a route with an optional parameter, you can use a question mark (?
) after the parameter name. For example, in app.module.ts
:
// app.module.ts
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { UserDetailsComponent } from './user-details/user-details.component';
const routes: Routes = [
{ path: 'user/:id?', component: UserDetailsComponent },
// Other routes...
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
Params
To access route parameters in a component, you can use the ActivatedRoute
service. For example, in a component:
// user-details.component.ts
import { ActivatedRoute } from '@angular/router';
export class UserDetailsComponent {
constructor(private route: ActivatedRoute) {
// Accessing route parameters
this.route.params.subscribe(params => {
const userId = params['id'];
// Do something with the userId...
});
}
}