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事件创建可观察对象的方式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 
