加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular 2 RxJS检查延迟后鼠标事件是否仍然有效

发布时间:2020-12-17 17:44:14 所属栏目:安全 来源:网络整理
导读:我正在使用Angular 2来制定指令.我有以下事件绑定到主机组件: host: { '(mouseenter)': 'onMouseEnter($event)','(mouseleave)': 'onMouseLeave($event)'} 我还在指令上创建了两个流和监听器来管理这两个事件 export class PopupDirective { private _mouse
我正在使用Angular 2来制定指令.我有以下事件绑定到主机组件:

host: {
    '(mouseenter)': 'onMouseEnter($event)','(mouseleave)': 'onMouseLeave($event)'
}

我还在指令上创建了两个流和监听器来管理这两个事件

export class PopupDirective {
    private _mouseEnterStream: EventEmitter<any> = new EventEmitter();
    private _mouseLeaveStream: EventEmitter<any> = new EventEmitter();

    onMouseEnter($event) {
         this._mouseEnterStream.emit($event);
    }

    onMouseLeave($event) {
         this._mouseLeaveStream.emit($event);
    }
}

我希望只有在一个固定的延迟(即没有发生mouseleave)之后mouseenter事件仍处于活动状态时才调用我的订阅.我尝试这样做,但它不起作用(这是有道理的,我只是不知道如何解决它).

this._mouseEnterStream.flatMap((e) => {
  return Observable
    .of(e)
    .takeUntil(this._mouseLeaveStream);
}).delay(2000).subscribe(
  () => console.log('yay,it worked!')
);

有Angular 2 / RxJS经验的人是否知道如何处理这个问题?

解决方法

Günter的答案正是您所期望的,但您应该使用of运算符而不是不存在的返回运算符.

this._mouseEnterStream.flatMap((e) => {
  console.log('_mouseEnterStream.flatMap');
  return Observable
      .of(e)
      .delay(2000)
      .takeUntil(this._mouseLeaveStream);
}).subscribe(
  (e) => {
    console.log('yay,it worked!');
    console.log(e);
  }
);

请参阅相应的plunkr:https://plnkr.co/edit/vP3xRDXxFanqzLEKd3eo?p=preview.

此外,还有a proposal in Angular旨在通过模板语法简化使用Rx从DOM事件创建可观察对象的方式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读