Угловое прослушивание для включения / выключения элементов - PullRequest
1 голос
/ 20 марта 2019

Я пытаюсь выяснить, отключен ли элемент в угловой директиве.

Я пытаюсь с хост-слушателями пока что не повезло

Директива:

 @HostBinding('attr.disabled') isDisabled : boolean;

 @HostListener("disabled") disabled() {
     if(this.isDisabled) {
          // do some action 
     }
 }

Он работает для меня с сеттером

@Input('disabled')
set disabled(val: string) {
  if(val) {
      this.elementRef.nativeElement.setAttribute('disabled', val);
  } else {
      this.elementRef.nativeElement.removeAttribute('disabled');
  }
}

, но я не хочу использовать сеттер, потому что разрабатываемая мной директива не требует включения и отключения кнопок, она только прослушивает отключение изменений атрибутов.

Я хочу, чтобы он был общим для логики отключения.

1 Ответ

1 голос
/ 20 марта 2019

Не уверен, что это правильный путь, но он работает.

https://stackblitz.com/edit/mutationobserver-test

import { Directive, ElementRef } from '@angular/core';

@Directive({
  selector: '[appTestDir]'
})
export class TestDirDirective {
  observer: MutationObserver;

  constructor(private _el: ElementRef) {
    console.log(_el);
    this.observer = new MutationObserver(
      list => {
        for (const record of list) {
          console.log(record);
          if (record && record.attributeName == 'disabled' &&  record.target && record.target['disabled'] !== undefined) {
            this._el.nativeElement.style.border = record.target['disabled'] ? '2px dashed red' : null;
          }
        }
      }
    );
    this.observer.observe(this._el.nativeElement, {
      attributes: true,
      childList: false,
      subtree: false
    });
  }

}
...