带回调的Angular EventEmitter

时间:2019-07-18 10:24:42

标签: javascript angular typescript callback angular-event-emitter

我想在我的角度应用程序中制作自定义按钮组件,并且我有一种实现点击的方法,这是代码:

export class MyButtonComponent {
  @Input() active: boolean = false;
  @Output() btnClick: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();

  @HostListener('click', ['$event'])
  public async onClick(event: MouseEvent) {
      this.active = true;
      await this.btnClick.emit(event);
      this.active = false;
  }
}

问题是当用户单击按钮时,“活动”将为true,事件将执行,但是“活动”将为false,而无需等待事件完成。我希望在事件完全结束时,“活动”为false被执行。

我该如何解决此问题,或者如何将回调添加到emit方法?

2 个答案:

答案 0 :(得分:1)

您可以订阅EventEmitters:

this.btnClick.subscribe(() => this.active = false);

那会给你

export class MyButtonComponent implements OnInit {
  @Input() active: boolean = false;
  @Output() btnClick: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();

  @HostListener('click', ['$event'])
  public onClick(event: MouseEvent) {
      this.active = true;
      this.btnClick.emit(event);
  }
  
  ngOnInit() {
    this.btnClick.subscribe(() => this.active = false);
  }
}

答案 1 :(得分:0)

由于Active是输入,为什么不从父组件更改其值。我的意思是,您可以将 this.active = false; MyButtonComponent 移动到用于处理 Output

的方法内的HostComponent上