Shared modules help you keep common parts of your app in one place. This makes your code cleaner and easier to manage.
Shared modules for reusable components in Angular
import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { SomeComponent } from './some.component'; @NgModule({ declarations: [SomeComponent], imports: [CommonModule], exports: [SomeComponent] }) export class SharedModule {}
Use declarations to list components, directives, and pipes in this module.
Use exports to make these components available to other modules.
import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { ButtonComponent } from './button.component'; @NgModule({ declarations: [ButtonComponent], imports: [CommonModule], exports: [ButtonComponent] }) export class SharedModule {}
import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { HighlightDirective } from './highlight.directive'; @NgModule({ declarations: [HighlightDirective], imports: [CommonModule], exports: [HighlightDirective] }) export class SharedModule {}
import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { DateFormatPipe } from './date-format.pipe'; @NgModule({ declarations: [DateFormatPipe], imports: [CommonModule], exports: [DateFormatPipe] }) export class SharedModule {}
This example shows a shared module with a button component. The main app uses the shared button by importing SharedModule. The button appears inside the app's main page.
import { Component, NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { CommonModule } from '@angular/common'; @Component({ selector: 'app-button', template: `<button>Click me!</button>` }) export class ButtonComponent {} @NgModule({ declarations: [ButtonComponent], imports: [CommonModule], exports: [ButtonComponent] }) export class SharedModule {} @Component({ selector: 'app-root', template: `<h1>Welcome</h1><app-button></app-button>` }) export class AppComponent {} @NgModule({ declarations: [AppComponent], imports: [BrowserModule, SharedModule], bootstrap: [AppComponent] }) export class AppModule {}
Always export components, directives, or pipes you want to reuse outside the shared module.
Import CommonModule in shared modules to use common Angular directives like ngIf and ngFor.
Do not provide services in shared modules to avoid multiple instances; use core modules for services.
Shared modules group reusable components, directives, and pipes.
They help keep your app organized and avoid repeating code.
Import shared modules in feature modules to use their exported parts.