If you want to use the attribute directive in your custom components, you can make these components expand from an abstract class and 'forwardRef' from an abstract class type to your component type. So you can choose the angular DI for the abstract class (in your directive).
Abstract class:
export abstract class MyReference {
Custom component:
@Component({ // ... providers: [ {provide: MyReference, useExisting: forwardRef(() => MyCustomComponent)} ], }) export class MyCustomComponent extends MyReference implements OnInit { // ... }
Directive:
@Directive({ selector: '[appMyDirective]' }) export class CustomDirective{ constructor(private host:MyReference) { console.log(this.host);
Thus, you can use the directive for any component that extends your abstract class.
This, of course, will only work on your own components.
source share