How to declare a directive globally for all modules? How to declare a directive globally for all modules? angular angular

How to declare a directive globally for all modules?


According @CrazyMac's comment, a good way would be to create a DirectivesModule. Inside this module you can declare and import all your directives then you will be able to import this module anywhere you want.

app/modules/directives/directives.module.ts

import { NgModule } from '@angular/core';import { HighlightDirective } from './highlight.directive';@NgModule({  imports: [],  declarations: [HighlightDirective],  exports: [HighlightDirective]})export class DirectivesModule { }

app/modules/directives/highLight.directive.ts

import { Directive, ElementRef } from '@angular/core';@Directive({ selector: '[myHighlight]' })export class HighlightDirective {  constructor(el: ElementRef) {    el.nativeElement.style.backgroundColor = 'yellow';  }}

app/modules/otherModule/other-module.module.ts

import { DirectivesModule } from '../directives/directives.module';@NgModule({  imports: [    DirectivesModule  ],  declarations: []})export class OtherModule { }


If you need to use the Directive

@Directive({  selector: '[appMyCommon]'})export class MyCommonDirective{}

everywhere you should create a new Module.

If you use the Angular CLI you can generate:

ng g module my-common

The Module:

@NgModule({ declarations: [MyCommonDirective], exports:[MyCommonDirective]})export class MyCommonModule{}

Important! the exports allow you to use the Directives outside the Module.

Finally, import that Module in every Module where you need to use the Directive.

for example:

@NgModule({  imports: [MyCommonModule]})export class AppModule{}

Example: Plunker