2
@HostListner
で同様の構文を使用し、そのイベントからfromEvent()
を使用してストリームを作成したいと考えています。現在、スクロールはfromEvent
サブスクリプションを開始していません。ウィンドウを渡す方法:@HostListenerを使用してObservable.fromEvent()サブスクリプションをトリガーするターゲットをスクロールしますか?
質問: var source = Observable.fromEvent(target, 'window:scroll');
をトリガーするにはどうすればよいですか?
import { Directive, HostListener } from '@angular/core';
import {Observable} from "rxjs";
import 'rxjs/add/observable/fromEvent';
@Directive({
selector: '[mh-scroll]'
})
export class MhScroll {
lastKnownScrollPosition: number;
ticking: boolean;
constructor() {
this.lastKnownScrollPosition = 0;
this.ticking = false;
}
isElementCloseToTop(target) {
var source = Observable.fromEvent(target, 'window:scroll'); //this never triggers.
var subscription = source.subscribe(
(x) => {
console.log('Next: Clicked!');
},
(err) => {
console.log('Error: %s', err);
},
() => {
console.log('Completed');
});
this.ticking = false;
}
@HostListener('window:scroll', ['$event.target'])
triggeredScroll(target) {
this.lastKnownScrollPosition = window.scrollY;
if (!this.ticking) {
window.requestAnimationFrame(this.isElementCloseToTop.bind(this, target));
}
this.ticking = true;
}
}