我正在使用Angular 2來製作一個指令。我有以下事件綁定到主機組件:Angular 2 RxJS檢查延遲後的鼠標事件是否仍然有效
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);
}
}
我想我subscribe
只能被稱爲如果mouseenter
事件在固定延遲後仍然有效(即,沒有發生mouseleave
)。我試過這樣做,但它不起作用(這是有道理的,我只是不知道如何解決它)。
this._mouseEnterStream.flatMap((e) => {
return Observable
.of(e)
.takeUntil(this._mouseLeaveStream);
}).delay(2000).subscribe(
() => console.log('yay, it worked!')
);
有誰有角2/RxJS經驗,知道應該怎麼處理這個?
哪裏'this._mouseStream'從何而來? –
@GünterZöchbauer對不起,應該是mouseEnterStream – Harangue
順便說一句,因爲你使用Rx,你真的不需要EventEmitters。只需使用主題。有點驚訝,你可以使用EventEmitters作爲Observables,也許ng2將它們轉化爲引擎蓋。 – kakigoori