javascript - Angular - 是否可以通过指令阻止执行(点击)事件?

标签 javascript angular

我创建了以下指令,我想阻止 (click) 事件在特定条件下执行(或延迟点击,或要求用户确认等)。出于演示目的,我的以下目标只是完全阻止执行事件:

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

@Directive({
  selector: '[disabledButton]'
})
export class DisabledButtonDirective {

  @HostListener('click', ['$event'])
  clickEvent(event) {
    event.stopImmediatePropagation();
    event.preventDefault();
    event.stopPropagation();
  }

  constructor() {
  }
}

这是我的标记:

<button (click)="shouldNotBeExecuted()" disabledButton>Push Me</button>

在上面我希望 shouldNotBeExecuted() 方法不被执行。但这是...

最佳答案

是的,这是可能的:

@Directive({
  selector: '[disabledButton]'
})
export class DisabledButtonDirective {
  subscription = new Subscription();

  constructor(private elRef: ElementRef) {}

  ngOnInit() {
    const el = this.elRef.nativeElement;
    this.subscription = fromEvent(el.parentNode, 'click', { capture: true })
      .subscribe((e: any) => {
        if (e.target === el) {
          e.stopPropagation()
        }
      }); 
  }

  ngOnDestroy() {
    this.subscription.unsubscribe();
  }
}

Ng-run Example

关于javascript - Angular - 是否可以通过指令阻止执行(点击)事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63416540/

相关文章:

javascript - IF 函数运行,而不是 ELSE

从 BehaviorSubject 创建的 Angular 2 rxjs 可观察对象不适用于 forkJoin

Angular 2 构建错误 : '=' expected in index. d.ts

angular - 错误 TS2307 : Cannot find module 'moment' in moment-date-adapter. d.ts

javascript - 使用 Google Chart 的 timeofday 数据类型无法正确绘制小时数据。所有时间均晚 5 小时显示

javascript - 相对引用必须以 "/"、 "./"或 "../"开头

javascript - 从 React JS 中的输入字段获取值

javascript - position.set 如何使 Canvas 图像居中?

javascript - 为什么tsconfig需要编译Javascript文件Angular

javascript - Paypal 点击按钮不适用于 safari