import { Directive, Input, OnInit } from '@angular/core'; import { NgControl } from '@angular/forms'; @Directive({ selector: '[mkDisableControl]' }) export class DisableControlDirective implements OnInit { private _currentState = false; constructor(private _ngControl: NgControl) { } get mkDisableControl(): boolean { return this._currentState; } @Input() set mkDisableControl(condition: boolean) { this._currentState = condition; this._applyDisableState(this._currentState); } ngOnInit(): void { if (this._ngControl.control) { this._ngControl.control.statusChanges.subscribe( state => { const active = state === 'DISABLED'; if (active !== this._currentState) { this._applyDisableState(this._currentState); } } ); } } private _applyDisableState(state: boolean): void { if (this._ngControl.control) { if (state) { this._ngControl.control.disable(); } else { this._ngControl.control.enable(); } } } }