首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >离子指令未发出事件

离子指令未发出事件
EN

Stack Overflow用户
提问于 2021-07-21 20:29:00
回答 1查看 30关注 0票数 0

我已经为长按创建了一个离子5指令。以下是代码。

代码语言:javascript
复制
export class LongPressDirective implements AfterViewInit {

  private delay = 800;
  @Output() press = new EventEmitter();
  action: any;

  private longPressActive = false;

  constructor(private el: ElementRef,
    private gestureCtrl: GestureController,
    private zone: NgZone) { }

  ngAfterViewInit() {
    this.loadLongPressOnElement();
  }

  loadLongPressOnElement() {
    const gesture = this.gestureCtrl.create({
      el: this.el.nativeElement,
      threshold: 0,
      gestureName: 'long-press',
      onStart: ev => {
        this.longPressActive = true;
        this.longPressAction();
      },
      onEnd: ev => {
        this.longPressActive = false;
      }
    });
    gesture.enable(true);
  }

  private longPressAction() {
    if (this.action) {
      clearInterval(this.action);
    }
    this.action = setTimeout(() => {
      this.zone.run(() => {
        if (this.longPressActive === true) {
          this.longPressActive = false;
          this.press.emit();
        }
      });
    }, this.delay);
  }

}

当我在按钮中使用它并传递Popover的事件时,事件总是未定义的。因此,我的弹出页面出现在屏幕的中间,而不是按钮位置。

代码语言:javascript
复制
<ion-button appLongPress (press)="onPress($event)">
Test
</ion-button>

async onPress(ev: any) {
// ev is undefined here
// raise popover here
}

我想我需要在指令的this.press.emit();方法中传递事件,但是我不知道要传递什么。我尝试了几种方法,但都不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-21 21:03:10

只需在此处传递事件

代码语言:javascript
复制
onStart: ev => {
  this.longPressActive = true;
  this.longPressAction(ev);
},

还有这里

代码语言:javascript
复制
private longPressAction(ev) {
   ...
   this.press.emit(ev);
   ... 
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68469492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档