按钮@Directive 通过@Input 在Angular 中绑定禁用属性

Button @Directive to bind disable attribute via @Input in Angular

我正在尝试创建一个按钮指令,它可以通过 @Input 接收布尔值并绑定到 <button> 元素的 disable 属性。

这是我目前得到的:

加载中-button.directive.ts

@Directive({ selector: '[appLoadingButton]' })
export class LoadingButtonDirective implements OnInit {
  @Input() loaderState: boolean;

  constructor(private renderer: Renderer2, private el: ElementRef) { }

  ngOnInit() {
    this.renderer.setAttribute(this.el.nativeElement, 'disabled', this.loaderState ? 'disabled' : '');
  }
}

模板

<button appLoadingButton [loaderState]="submitting"></button>

在该模板的组件中,submitting 属性 在方便时设置为 truefalse

我的问题是这样它总是被禁用,我期望禁用属性会随着指令动态变化。

任何帮助将不胜感激。

有多种选择。一种是使用 @HostBinding,这就是您所需要的:

@Directive({ selector: '[appLoadingButton]' })
export class LoadingButtonDirective {
  @Input() 
  @HostBinding('disabled')
  loaderState: boolean;
}