Reputation: 2841
Is there anyway to listen to custom events in angular 2 in intervals ? like once in 3 seconds ?
export class scrollDirectiveComponent {
pageNo: any = 1;
@Input() pageNumber: any;
@Output() emitPageNumber: EventEmitter<any> = new EventEmitter();
@HostListener('scroll', ['$event'])
onScroll(event) {
console.log('scrolled', event.target.scrollTop);
let tracker = event.target;
let limit = tracker.scrollHeight - tracker.clientHeight - 5;
console.log(event.target.scrollTop, limit);
if (event.target.scrollTop > limit) {
this.pageNumber++;
this.emitPageNumber.emit(this.pageNumber);
}
}
}
It keeps on listening to scroll event and the page number is automatically incremented . If one cannot wait then is there anyway in which the scroll bar can be changed to a new position?
Upvotes: 1
Views: 1269
Reputation: 19504
As soon as i understood then you can do like this, on each scroll event you emit to observable and on observable throttleTime(3000) it means that only one event will go through.
export class scrollDirectiveComponent {
pageNumber: any = 1;
private scrollEvents = new Subject();
constructor() {
scrollEvents
.throttleTime(3000)
.subscribe(() => {
this.emitPageNumber.emit(++this.pageNumber);
});
}
@Input() pageNumber: any;
@Output() emitPageNumber: EventEmitter<any> = new EventEmitter();
@HostListener('scroll', ['$event'])
onScroll(event) {
console.log('scrolled', event.target.scrollTop);
let tracker = event.target;
let limit = tracker.scrollHeight - tracker.clientHeight - 5;
console.log(event.target.scrollTop, limit);
if (event.target.scrollTop > limit) {
this.scrollEvents.next(true);
}
}
}
Other option to look would be something like this, but i am not sure you need to try since i have never done directive
constructor(private _el: ElementRef){
Observable.fromEvent(_el, 'resize')
.throttleTime(3000)
.subscribe(() => {
this.emitPageNumber.emit(++this.pageNumber);
});
}
Upvotes: 3