Introduction

Angular 14+ introduced standalone components that don't require NgModule. Import errors occur when the imports array is missing required modules, or when bootstrapping is misconfigured.

Symptoms

Missing import error:

```bash $ ng build

  1. 1.Error: 'NgIf' is not a known element:
  2. 2.If 'ngIf' is an Angular component, verify that it's part of this module.
  3. 3.If 'ngIf' is an Angular directive, add it to the imports array.
  4. 4.`

Provider not found:

bash
Error: NullInjectorError: No provider for HttpClient!

Bootstrap error:

bash
Error: The standalone component 'AppComponent' needs to be bootstrapped using 'bootstrapApplication'

Common Causes

  1. 1.Missing CommonModule - NgIf, NgFor not available
  2. 2.Missing FormsModule - ngModel not working
  3. 3.Missing HttpClient - HTTP client not provided
  4. 4.Wrong imports syntax - Using NgModule imports style
  5. 5.Bootstrap configuration - Not using bootstrapApplication
  6. 6.Module vs Standalone mixing - Conflicting patterns

Step-by-Step Fix

  1. 1.Identify the error in logs
  2. 2.Verify configuration settings
  3. 3.Test connectivity
  4. 4.Apply corrective action
  5. 5.Verify the fix

Step 1: Add Required Imports

typescript // WRONG: Missing imports @Component({ selector: 'app-user', standalone: true, template: <div *ngIf="user">{{ user.name }}</div> <ul> <li *ngFor="let item of items">{{ item }}</li> </ul> ` }) export class UserComponent { // Error: NgIf, NgFor not found! }

// CORRECT: Import required directives import { NgIf, NgFor } from '@angular/common';

@Component({ selector: 'app-user', standalone: true, imports: [NgIf, NgFor], // Add required imports template: <div *ngIf="user">{{ user.name }}</div> <ul> <li *ngFor="let item of items">{{ item }}</li> </ul> }) export class UserComponent { } ```

Step 2: Import CommonModule (Alternative)

```typescript // Import entire CommonModule import { CommonModule } from '@angular/common';

@Component({ selector: 'app-user', standalone: true, imports: [CommonModule], // Includes NgIf, NgFor, etc. template: ... }) export class UserComponent { }

// Or import specific items (recommended for tree-shaking) import { NgIf, NgFor, NgClass, NgStyle } from '@angular/common';

@Component({ standalone: true, imports: [NgIf, NgFor, NgClass, NgStyle], // ... }) ```

Step 3: Import Forms Modules

```typescript // For template-driven forms import { FormsModule } from '@angular/forms';

@Component({ standalone: true, imports: [FormsModule], template: <input [(ngModel)]="name" /> }) export class FormComponent { }

// For reactive forms import { ReactiveFormsModule } from '@angular/forms';

@Component({ standalone: true, imports: [ReactiveFormsModule], template: <form [formGroup]="form"> <input formControlName="email" /> </form> }) export class ReactiveComponent { } ```

Step 4: Import RouterModule

```typescript import { RouterModule } from '@angular/router';

@Component({ standalone: true, imports: [ RouterModule, // Or specific router directives // RouterOutlet, RouterLink, RouterLinkActive ], template: <nav> <a routerLink="/home">Home</a> </nav> <router-outlet></router-outlet> }) export class AppComponent { }

// For routing in standalone import { provideRouter } from '@angular/router';

// main.ts bootstrapApplication(AppComponent, { providers: [ provideRouter(routes) ] }); ```

Step 5: Provide HttpClient

```typescript // In main.ts for standalone app import { provideHttpClient } from '@angular/common/http';

bootstrapApplication(AppComponent, { providers: [ provideHttpClient() ] });

// Or in component with providers @Component({ standalone: true, imports: [HttpClientModule], // Deprecated in Angular 15+ providers: [ // Component-level providers ] }) export class ApiComponent { }

// Angular 15+ approach bootstrapApplication(AppComponent, { providers: [ provideHttpClient( withInterceptors([authInterceptor]) ) ] }); ```

Step 6: Bootstrap Standalone App

```typescript // main.ts - Correct standalone bootstrap import { bootstrapApplication } from '@angular/platform-browser'; import { AppComponent } from './app/app.component'; import { provideRouter } from '@angular/router'; import { provideHttpClient } from '@angular/common/http'; import { routes } from './app/app.routes';

bootstrapApplication(AppComponent, { providers: [ provideRouter(routes), provideHttpClient() ] }).catch(err => console.error(err));

// WRONG: Using NgModule bootstrap for standalone platformBrowserDynamic().bootstrapModule(AppModule); // This fails for standalone components

// CORRECT: Use bootstrapApplication for standalone ```

Step 7: Import Other Standalone Components

typescript // Child standalone component @Component({ selector: 'app-child', standalone: true, template: <p>Child component</p>` }) export class ChildComponent { }

// Parent imports child @Component({ selector: 'app-parent', standalone: true, imports: [ChildComponent], // Import standalone component template: <app-child></app-child> }) export class ParentComponent { } ```

Step 8: Import NgModules into Standalone

```typescript // You can import NgModules into standalone components import { SharedModule } from './shared/shared.module';

@Component({ standalone: true, imports: [ CommonModule, FormsModule, SharedModule, // NgModule with shared components MatInputModule // Angular Material module ] }) export class FormComponent { }

// The NgModule's exports become available ```

Step 9: Configure Providers

```typescript // App-level providers bootstrapApplication(AppComponent, { providers: [ provideRouter(routes), provideHttpClient(), { provide: API_URL, useValue: 'https://api.example.com' }, UserService, AuthService ] });

// Component-level providers @Component({ standalone: true, providers: [ LocalService, // New instance for each component { provide: SomeToken, useFactory: () => new SomeService() } ] }) export class StandaloneComponent { }

// Use viewProviders for providers visible to children @Component({ standalone: true, viewProviders: [SharedService] }) ```

Step 10: Migrate from NgModule

```typescript // BEFORE: NgModule-based component @NgModule({ imports: [CommonModule, FormsModule, RouterModule], declarations: [UserComponent], exports: [UserComponent] }) export class UserModule { }

// AFTER: Standalone component @Component({ selector: 'app-user', standalone: true, imports: [CommonModule, FormsModule, RouterModule], template: ... }) export class UserComponent { }

// No module needed!

// Update routing // BEFORE { path: 'users', loadChildren: () => import('./users/users.module').then(m => m.UsersModule) }

// AFTER { path: 'users', loadComponent: () => import('./users/user.component').then(c => c.UserComponent) } ```

Standalone Imports Reference

ImportFor
CommonModuleNgIf, NgFor, NgClass, etc.
FormsModulengModel, template forms
ReactiveFormsModuleFormGroup, FormControl
RouterModulerouterLink, router-outlet
HttpClientModuleHttpClient (deprecated)
provideHttpClient()HttpClient (Angular 15+)

Verification

```bash # After configuring standalone imports

# 1. Build should succeed ng build

# Should not see "not a known element" errors

# 2. Check tree-shaking ng build --stats-json npx webpack-bundle-analyzer dist/stats.json

# Standalone imports should result in smaller bundles

# 3. Run application ng serve

# Should start without import errors

# 4. Test components render # Navigate to routes, check components appear

# 5. Check console # Should not see NullInjectorError ```

Prevention

To prevent Angular standalone component import issues from recurring, implement these proactive measures:

1. Use Strict Template Type Checking

```json // tsconfig.json { "angularCompilerOptions": { "strictTemplates": true, "strictInjectionParameters": true } }

// Catches import errors at compile time ```

2. Document Component Dependencies

typescript
// Use JSDoc to document required imports
/**
 * UserListComponent - Displays list of users
 * @requires CommonModule - For *ngFor, *ngIf
 * @requires RouterModule - For routerLink
 * @requires UserService - For user data
 */
@Component({
  standalone: true,
  imports: [CommonModule, RouterModule],
  // ...
})
export class UserListComponent { }

3. Create Import Presets

```typescript // shared-imports.ts - Pre-configured import sets import { CommonModule } from '@angular/common'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { RouterModule } from '@angular/router';

export const COMMON_IMPORTS = [ CommonModule, FormsModule, RouterModule ] as const;

export const FORM_IMPORTS = [ CommonModule, FormsModule, ReactiveFormsModule ] as const;

// Usage in component @Component({ standalone: true, imports: [...COMMON_IMPORTS, MyCustomService] }) ```

Best Practices Checklist

  • [ ] Enable strict template type checking
  • [ ] Document component dependencies
  • [ ] Create reusable import presets
  • [ ] Test components in isolation
  • [ ] Use Angular CLI linting
  • [ ] Review imports during code review
  • [Fix Angular Module Not Found](/articles/fix-angular-module-not-found)
  • [Fix Angular Dependency Injection Error](/articles/fix-angular-dependency-injection-error)
  • [Fix Angular Ivy Compilation Failed](/articles/fix-angular-ivy-compilation-failed)
  • [Technical troubleshooting: Fix Browser Back Button State Lost Spa Navigation ](browser-back-button-state-lost-spa-navigation)
  • [Fix Cors Fetch Localhost Development Blocked Issue in Frontend](cors-fetch-localhost-development-blocked)
  • [Fix Csp Violation Blocked Inline Script Style Issue in Frontend](csp-violation-blocked-inline-script-style)
  • [Fix Angular Change Detection Loop](fix-angular-change-detection-loop)
  • [Fix Angular Dependency Injection Error](fix-angular-dependency-injection-error)

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "TechArticle", "headline": "Fix Angular Standalone Component Import", "description": "Troubleshoot Angular standalone component import errors. Configure imports array and bootstrap correctly.", "url": "https://www.fixwikihub.com/fix-angular-standalone-component-import", "publisher": { "@type": "Organization", "name": "FixWikiHub", "url": "https://www.fixwikihub.com" }, "author": { "@type": "Person", "name": "FixWikiHub Editorial Team" }, "datePublished": "2026-04-04T04:44:28.429Z", "dateModified": "2026-04-04T04:44:28.429Z" } </script>