Angular: Using Multiple NgModules in Detail with Example
Angular: Using Multiple NgModules
in Detail with Example
Angular's modularity is powered by the NgModule
mechanism. It helps in organizing the application into cohesive blocks of functionality. As applications grow, so does the need for splitting them into smaller, more maintainable modules. This article provides a detailed guide on how to leverage multiple NgModules
in an Angular application, illustrated with an example.
Understanding NgModule
Before diving into multiple modules, it's essential to understand the basic structure of an NgModule
. Typically, an NgModule
declares a block of components, directives, and pipes. Then, it exports those pieces to be used in other modules.
1. Why Multiple NgModules
?
Reusability: Components, directives, and services that are encapsulated within a module can be easily reused across different parts of an application or even in different applications.
Lazy Loading: Helps in loading parts of an app asynchronously on demand, which can lead to a faster application load time.
Separation of Concerns: Organizing the app into feature modules can help in maintaining and understanding the application.
2. Types of Modules:
Root Module (AppModule): Every Angular application has exactly one root module, usually named
AppModule
.Feature Modules: These are modules for a specific application feature, like a user profile or dashboard.
Shared Modules: A module that's used to prevent repetition by collecting commonly used components, directives, and pipes.
Core Module: A module that collects services that should be instantiated only once per application.
3. Example: Creating Multiple NgModules
Consider an application with a user dashboard and a user profile:
a. AppModule (Root Module):
app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { DashboardModule } from './dashboard/dashboard.module';
import { ProfileModule } from './profile/profile.module';
import { AppComponent } from './app.component';
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule, DashboardModule, ProfileModule],
bootstrap: [AppComponent]
})
export class AppModule { }
b. Dashboard Feature Module:
dashboard.module.ts
import { NgModule } from '@angular/core';
import { DashboardComponent } from './dashboard.component';
@NgModule({
declarations: [DashboardComponent],
exports: [DashboardComponent]
})
export class DashboardModule { }
c. Profile Feature Module:
profile.module.ts
import { NgModule } from '@angular/core';
import { ProfileComponent } from './profile.component';
@NgModule({
declarations: [ProfileComponent],
exports: [ProfileComponent]
})
export class ProfileModule { }
4. Combining Modules:
You can import one module into another using the imports
array in the @NgModule
decorator.
For instance, if the Dashboard needs functionality from the Profile module, it would look like this:
dashboard.module.ts
import { NgModule } from '@angular/core';
import { ProfileModule } from '../profile/profile.module';
import { DashboardComponent } from './dashboard.component';
@NgModule({
declarations: [DashboardComponent],
imports: [ProfileModule],
exports: [DashboardComponent]
})
export class DashboardModule { }
5. Lazy Loading:
Modules can also be lazy-loaded, meaning they will only be loaded when they're needed (usually tied to a route). This is beyond the scope of this article but is a powerful reason for using feature modules.
Conclusion
Multiple NgModules
in Angular provide a modular architecture, which is beneficial for code organization, reusability, maintainability, and performance optimization (through techniques like lazy loading). By properly segmenting your application into logical modules, you can ensure a scalable and efficient Angular application structure.