Open In App

Use component from another module -Angular

Angular's modular architecture is one of its core strengths, allowing it to break down large applications into smaller, manageable pieces. A key aspect of modularity in Angular is the ability to share components across different modules. You can promote code reuse and maintainability by exporting and importing components between modules. In this article, we'll see how to use Angular's modularity by sharing components across modules.

Module Export and Import

In Angular, modules encapsulate a cohesive set of components, directives, pipes, and services. Modules can be imported into other modules to make their contents available for use. When sharing components across modules, we use the concepts of module export and import:

  1. Exporting Components: Components that need to be shared across modules are exported from their defining module using the exports property of the @NgModule decorator.
  2. Importing Modules: Modules containing the exported components are imported into other modules where the components are needed using the imports property of the @NgModule decorator.

Approach 1 : Exporting the Component from its Module

Export the component

In the module , wherever the component is defined , it needs to be declared in the declarations array of the `@NgModule` decorator. We also need to export the required component in the `exports` array , so that we can use the component in the other module.

Import the Module

In the module, where we are trying to use the component, we need to import the module that contains the component in the `imports` array.

Use the component

Now we can directly use the component in the templates of components that belong to the importing module.

Example:

Let us take an example to understand the above approach.

Step 1: Install the Angular CLI using the following command

npm install -g @angular/cli

Step 2: Create a new Angular Project.

ng new new-project
cd new-project

Step 3: To start the application run the following command.

ng serve

Step 4: Let us create a new module

cd src
ng g module sample

So here, we are creating a new module named sample .

Step 5 : Let us create a new component inside the module

ng g c loader

The above command creates a new component called loader inside the sample module.

Screenshot-2024-04-02-132552

Step 6: Usage of component

<!-- app.component.html -->
<div>
  <h3>Usage of Component from other module:</h3>
  <app-loader></app-loader>
</div>
<!-- loader.component.html -->
<p>loader component from other module works!</p>
//App.module.ts

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { FormsModule } from '@angular/forms';
import { SampleModule } from 'src/sample/sample.module';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';

@NgModule({
    declarations: [AppComponent],
    imports: [
        BrowserModule,
        AppRoutingModule,
        FormsModule,
        SampleModule,
        BrowserAnimationsModule,
    ],
    providers: [],
    bootstrap: [AppComponent],
})
export class AppModule { }
//sample.module.ts

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { LoaderComponent } from './loader/loader.component';

@NgModule({
    declarations: [LoaderComponent],
    imports: [CommonModule],
    exports: [LoaderComponent],
})
export class SampleModule { }

Output:

Screenshot-2024-04-02-132552

Approach 2 : Moving the Component to the Shared Module

Create the Shared Module

In this approach we will be creating a new module called as Shared module which contains of commonly used and shared component, directives , services, pipes etc, which are used in the entire application multiple times

Export the Component

Whatever component we want to use in other module, we need to export that component by declaring them in exports array of the SharedModule .

Import the Shared Module

In the Module where we want to use the component, we can import the SharedModule. So that we can have access to the components that are exported in the SharedModule

Use the component in the template

Now we can directly use the component in the templates of components that belong to the importing module.

Example:

Let us take an example to understand the above approach.

We have already learned how to create an Angular application in the above example, now let us look how to create a shared module and use the component from shared module in other component.

Step 1:Let us create a new module named as shared

cd src
ng g module shared

So here, we are creating a new module named shared .

Step 2: In the shared module, let us create a component , which is used multiple times across the application

ng g c loader

The above command creates a new component named loader in the shared module.

Step 3 : Now we need to add the component in the exports array of @NgModule decorator.

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { LoaderComponent } from './loader/loader.component';

@NgModule({
declarations: [LoaderComponent],
imports: [CommonModule],
exports: [LoaderComponent],
})
export class SharedModule {}

Step 4: Usage of component

<!-- app.component.html -->
<div>
  <h3>Usage of Component from other module:</h3>
  <app-loader></app-loader>
</div>
<!-- loader.component.html -->
<p>loader component from other module works!</p>
//AppModule.ts

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { FormsModule } from '@angular/forms';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { SharedModule } from 'src/shared/shared.module';

@NgModule({
    declarations: [AppComponent],
    imports: [
        BrowserModule,
        AppRoutingModule,
        FormsModule,
        BrowserAnimationsModule,
        SharedModule,
    ],
    providers: [],
    bootstrap: [AppComponent],
})
export class AppModule { }

Output:

Screenshot-2024-04-02-132552

In this approach we are creating a shared module, which is the most recommended approach , since it contains all the shared components, directives , services etc, and we can directly import SharedModule in other Modules, instead of importing individual modules.

Benefits of Sharing Components Across Modules

Article Tags :