Bird
Raised Fist0
Angularframework~10 mins

Shared modules for reusable components in Angular - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Shared modules for reusable components
Create Shared Module
↓
Declare Reusable Components
↓
Export Components
↓
Import Shared Module in Feature Modules
↓
Use Reusable Components in Templates
↓
App Runs
This flow shows how to create a shared module, declare and export reusable components, then import that module into feature modules to use those components.
Execution Sample
Angular
import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';

@Component({ selector: 'app-button', template: '<button>Click me</button>' })
export class ButtonComponent {}

@NgModule({ declarations: [ButtonComponent], exports: [ButtonComponent], imports: [CommonModule] })
export class SharedModule {}
Defines a reusable button component inside a shared module that exports it for use in other modules.
Execution Table
StepActionModule/ComponentResultNotes
1Create ButtonComponentButtonComponentComponent readyButton with 'Click me' text created
2Declare ButtonComponent in SharedModuleSharedModuleComponent declaredSharedModule knows about ButtonComponent
3Export ButtonComponent from SharedModuleSharedModuleComponent exportedOther modules can use ButtonComponent
4Import SharedModule in FeatureModuleFeatureModuleSharedModule importedFeatureModule can use ButtonComponent
5Use <app-button> in FeatureModule templateFeatureModule templateButton rendersButtonComponent appears in UI
6App runsAppButton visible and usableReusable component works across modules
💡 All steps complete, reusable component shared successfully
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4After Step 5Final
ButtonComponentundefinedDefinedDeclared in SharedModuleExported from SharedModuleAvailable in FeatureModuleUsed in templateRendered in UI
SharedModuleundefinedundefinedDeclared with ButtonComponentExports ButtonComponentImported in FeatureModuleEnables usageActive in app
Key Moments - 3 Insights
Why do we export components from the shared module?
Exporting components from the shared module makes them available to other modules that import this shared module, as shown in execution_table step 3.
Can we use a component declared in a shared module without importing that module?
No, other modules must import the shared module to use its exported components, as shown in execution_table step 4.
Why do we import CommonModule in the shared module?
CommonModule provides common Angular directives like *ngIf and *ngFor, which reusable components often need, as shown in the execution_sample code.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, at which step is the ButtonComponent made available to other modules?
AStep 3
BStep 2
CStep 4
DStep 5
💡 Hint
Check the 'Result' column for when the component is exported.
According to variable_tracker, what is the state of SharedModule after step 4?
AExported ButtonComponent
BImported in FeatureModule
CDeclared with ButtonComponent
DUsed in template
💡 Hint
Look at the 'SharedModule' row under 'After Step 4'.
If we forget to export ButtonComponent from SharedModule, what happens when FeatureModule tries to use it?
AButtonComponent renders normally
BButtonComponent renders but without styles
CFeatureModule throws an error about unknown component
DApp compiles but ButtonComponent is hidden
💡 Hint
Refer to key_moments about exporting components and module imports.
Concept Snapshot
Shared modules group reusable components.
Declare components inside shared module.
Export them to make available outside.
Import shared module in feature modules.
Use components in templates anywhere imported.
This avoids repeating code and keeps app clean.
Full Transcript
This lesson shows how to create a shared module in Angular to hold reusable components. First, we define a component like ButtonComponent. Then we declare it inside a SharedModule and export it. Other feature modules import this SharedModule to use the ButtonComponent in their templates. The execution table traces each step from creation to usage. The variable tracker shows how ButtonComponent and SharedModule states change. Key moments clarify why exporting and importing are necessary. The quiz tests understanding of when components become available and what happens if exports are missing. The snapshot summarizes the process simply. This helps beginners see how Angular shares components cleanly across modules.

Practice

(1/5)
1. What is the main purpose of a shared module in Angular?
easy
A. To store environment configuration settings
B. To define the root component of the application
C. To group reusable components, directives, and pipes for easy sharing
D. To handle routing between different pages

Solution

  1. Step 1: Understand the role of shared modules

    Shared modules are designed to hold components, directives, and pipes that multiple parts of the app can use.
  2. Step 2: Compare with other module purposes

    Root modules handle app startup, routing modules manage navigation, and environment files store settings, not reusable UI parts.
  3. Final Answer:

    To group reusable components, directives, and pipes for easy sharing -> Option C
  4. Quick Check:

    Shared module = reusable parts [OK]
Hint: Shared modules bundle reusable UI parts for easy import [OK]
Common Mistakes:
  • Confusing shared modules with root or routing modules
  • Thinking shared modules store app settings
  • Assuming shared modules handle navigation
2. Which of the following is the correct way to export a component from a shared module?
easy
A. Add the component to both declarations and exports arrays in @NgModule
B. Add the component only to the imports array
C. Add the component only to the providers array
D. Add the component only to the bootstrap array

Solution

  1. Step 1: Understand Angular module metadata

    Components must be declared in declarations to be recognized, and exported in exports to be usable outside the module.
  2. Step 2: Check other arrays usage

    Imports bring in other modules, providers register services, bootstrap is for root components only.
  3. Final Answer:

    Add the component to both declarations and exports arrays in @NgModule -> Option A
  4. Quick Check:

    Declare + export = share component [OK]
Hint: Declare and export components to share them outside module [OK]
Common Mistakes:
  • Putting components only in imports or providers
  • Forgetting to export after declaring
  • Using bootstrap array in shared modules
3. Given this shared module code, what will be the output when FeatureComponent uses SharedButtonComponent?
@NgModule({
  declarations: [SharedButtonComponent],
  exports: [SharedButtonComponent]
})
export class SharedModule {}
@NgModule({
  imports: [SharedModule],
  declarations: [FeatureComponent]
})
export class FeatureModule {}
If FeatureComponent template contains <app-shared-button>Click</app-shared-button>, what happens?
medium
A. The button renders correctly with text 'Click'
B. Error: 'app-shared-button' is not a known element
C. The button renders but without text
D. The app crashes at runtime

Solution

  1. Step 1: Check module imports and exports

    SharedButtonComponent is declared and exported in SharedModule, which is imported by FeatureModule.
  2. Step 2: Confirm component usage in FeatureComponent

    Since FeatureModule imports SharedModule, FeatureComponent can use SharedButtonComponent selector without error.
  3. Final Answer:

    The button renders correctly with text 'Click' -> Option A
  4. Quick Check:

    Imported shared module exports = component usable [OK]
Hint: Import shared module to use its exported components [OK]
Common Mistakes:
  • Not importing SharedModule in FeatureModule
  • Forgetting to export component in SharedModule
  • Using component selector incorrectly
4. Identify the error in this shared module setup:
@NgModule({
  declarations: [SharedCardComponent],
  imports: [CommonModule]
})
export class SharedModule {}
@NgModule({
  imports: [SharedModule],
  declarations: [DashboardComponent]
})
export class DashboardModule {}
DashboardComponent template uses <app-shared-card> but Angular throws an error.
medium
A. CommonModule should not be imported in SharedModule
B. DashboardComponent should import SharedCardComponent directly
C. DashboardModule should declare SharedCardComponent again
D. SharedCardComponent is not exported from SharedModule

Solution

  1. Step 1: Check SharedModule exports

    SharedCardComponent is declared but not exported, so other modules can't use it.
  2. Step 2: Understand Angular module sharing rules

    To use a component from another module, it must be exported by that module.
  3. Final Answer:

    SharedCardComponent is not exported from SharedModule -> Option D
  4. Quick Check:

    Declare + export needed to share component [OK]
Hint: Always export components to share them outside module [OK]
Common Mistakes:
  • Forgetting to export declared components
  • Trying to redeclare components in feature modules
  • Misunderstanding imports vs exports
5. You want to create a shared module that provides a reusable button component and a custom pipe. Which setup correctly allows any feature module to use both without redeclaring them?
// SharedModule
@NgModule({
  declarations: [SharedButtonComponent, CustomPipe],
  exports: [SharedButtonComponent, CustomPipe],
  imports: [CommonModule]
})
export class SharedModule {}
// FeatureModule
@NgModule({
  imports: [SharedModule],
  declarations: [FeatureComponent]
})
export class FeatureModule {}
What must you do in FeatureComponent template to use both?
hard
A. Import SharedButtonComponent and CustomPipe directly in FeatureComponent
B. Use <app-shared-button> and apply | customPipe in template expressions
C. Declare SharedButtonComponent and CustomPipe again in FeatureModule
D. Use <shared-button> and | CustomPipe with capital letters

Solution

  1. Step 1: Confirm shared module exports

    SharedButtonComponent and CustomPipe are declared and exported in SharedModule, which FeatureModule imports.
  2. Step 2: Use correct selectors and pipe names

    FeatureComponent can use selector and apply | customPipe (pipe names are case-sensitive and lowercase by convention).
  3. Final Answer:

    Use <app-shared-button> and apply | customPipe in template expressions -> Option B
  4. Quick Check:

    Import shared module + use selectors and pipe names correctly [OK]
Hint: Use exported selectors and pipe names exactly as declared [OK]
Common Mistakes:
  • Redeclaring shared components or pipes in feature modules
  • Using wrong selector or pipe name casing
  • Trying to import components or pipes directly
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard