Angular CLI: 3 Options You Didn't Know About the Component Schematic

In this article, I will share with you three options/flags of the Component schematic that are very useful, yet unknown to many Angular developers.

The --export flag

When true, the declaring NgModule exports this component.

By default, when you use the ng generate component command, the generated component is only added to the declarations array of the NgModule in which it belongs. The component is therefore only available for components that are declared in the same NgModule.

You can use the --export flag to tell the Angular CLI to also automatically add the component to the exports array of the declaring NgModule—let’s say TeamModule. This will make it available to other NgModules that import TeamModule.

ng generate component team-list --export

With the above command, our TeamListComponent is now exported by the TeamModule as shown in the following code sample:

import { NgModule } from "@angular/core";
import { CommonModule } from "@angular/common";
import { TeamListComponent } from "./team-list/team-list.component";

@NgModule({
  declarations: [TeamListComponent],
  imports: [CommonModule],
  exports: [TeamListComponent], // the component is exported
})
export class TeamModule {}

The --export flag is also available for directives and pipes.

The --display-block flag

Specifies if the style will contain :host { display: block; }.

Angular components are inline by default. So, if you don't do anything, the browser will treat your Angular components as if their CSS display property was set to inline. This isn't always what you want. Some may even argue that you never want this behavior, but instead want your components to be block elements by default.

The Angular team has decided against changing this default behavior. Fortunately, the Angular CLI can now save you some time by adding the CSS needed to set your component's CSS display property to block thanks to the --display-block flag.

ng generate component team-card --display-block

With the command above, the team-card.component.css file will contain the following content:

:host {
  display: block;
}

The --type option

Adds a developer-defined type to the filename, in the format "name.type.ts".

When you generate a new Angular component, the CLI will append Component to the class name and .component.ts to the filename as recommended by the Angular style guide.

But, sometimes you may want to differentiate between your components. I personally tend to use the suffix page for my routed Angular components aka "pages". Thanks to the --type option, we can instruct the Angular CLI to generate components with our desired suffix:

ng generate component team-details --type=page

The above command will generate a file named team-details.page.ts with the following content:

import { Component, OnInit } from "@angular/core";

@Component({
  selector: "app-team-details",
  templateUrl: "./team-details.page.html",
  styleUrls: ["./team-details.page.css"],
})
export class TeamDetailsPage implements OnInit {
  constructor() {}

  ngOnInit(): void {}
}

Conclusion

In this article, you learned how to boost your productivity by using three Angular CLI options/flags when generating Angular components:

  • the --export flag, to create an exported Angular component;
  • the --display-block flag, to make your Angular component a block element;
  • the --type option, to set a custom suffix to help distinguish your Angular components.