Extended Diagnostics

Missing control flow directive

This diagnostics ensures that a standalone component which uses known control flow directives (such as *ngIf, *ngFor, or *ngSwitch) in a template, also imports those directives either individually or by importing the CommonModule.

      
import {Component} from '@angular/core';
@Component({
standalone: true,
// Template uses `*ngIf`, but no corresponding directive imported.
imports: [],
template: `<div *ngIf="visible">Hi</div>`,
})
class MyComponent {}

What's wrong with that?

Using a control flow directive without importing it will fail at runtime, as Angular attempts to bind to an ngIf property of the HTML element, which does not exist.

What should I do instead?

Make sure that a corresponding control flow directive is imported.

A directive can be imported individually:

      
import {Component} from '@angular/core';
import {NgIf} from '@angular/common';
@Component({
standalone: true,
imports: [NgIf],
template: `<div *ngIf="visible">Hi</div>`,
})
class MyComponent {}

or you could import the entire CommonModule, which contains all control flow directives:

      
import {Component} from '@angular/core';
import {CommonModule} from '@angular/common';
@Component({
standalone: true,
imports: [CommonModule],
template: `<div *ngIf="visible">Hi</div>`,
})
class MyComponent {}

Configuration requirements

strictTemplates must be enabled for any extended diagnostic to emit. missingControlFlowDirective has no additional requirements beyond strictTemplates.

What if I can't avoid this?

This diagnostic can be disabled by editing the project's tsconfig.json file:

      
{
"angularCompilerOptions": {
"extendedDiagnostics": {
"checks": {
"missingControlFlowDirective": "suppress"
}
}
}
}

See extended diagnostic configuration for more info.