离子按钮单击上的事件 preventDefault 不起作用

Posted

技术标签:

【中文标题】离子按钮单击上的事件 preventDefault 不起作用【英文标题】:Event preventDefault on ion-button click not working 【发布时间】:2019-02-01 10:04:09 【问题描述】:

我正在使用 Ionic 4,并且我做了一个指令来防止在某些条件适用时点击组件。

  @Directive(
      selector: '[appDisable]'
  )
  export class DisableDirective 

      @Input() ifTruthy: boolean = false;

      @HostListener('click', ['$event']) clickEvent(event: Event): boolean 
      if (this.ifTruthy) 
          console.log('Preventing click');
          console.log('This should prevent further clicks from happening?');
          event.preventDefault();
          event.stopPropagation();
          return false;
      

      return true;
      

      constructor(
      private element: ElementRef,
      protected renderer: Renderer2) 
      
  

然后在我的按钮上:

<ion-button appDisable [ifTruthy]="1 === 1" (click)="presentAlert()">Disabled</ion-button>

这不起作用,如果我将 click() 移动到上部元素(由于 stopPropagation),它会起作用,我想知道为什么这不起作用。

我发了stackBlitzz

感谢任何帮助。

【问题讨论】:

经过很长时间我遇到了这个post,它解决了这个问题。 【参考方案1】:

您可以在事件捕获阶段停止传播以防止执行 ionic 的处理程序。

【讨论】:

【参考方案2】:

尝试在函数顶部输入event.preventDefault();。有时为时已晚,软件已经完成了该事件。

【讨论】:

如果你在每个方法上添加一个console.log,你会看到@HostListener方法首先执行,而且javascript中没有竞争条件

以上是关于离子按钮单击上的事件 preventDefault 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

ionic2 离子列表,带有一个按钮,都具有(单击)事件

如何使用离子电容器将事件添加到移动设备的日历

Ionic2 Ion-Input onSubmit 单击表单内的顶部按钮

离子 - Routerlink 不触发生命周期事件

如何在按钮单击时提交离子单选按钮值?

单击离子页脚中的按钮首先不执行(单击)功能