Skip to content

Commit fceb7af

Browse files
authored
cleanup(cdk-scrollable): use fromEvent under the hood (#12589)
1 parent 9f0c31f commit fceb7af

File tree

1 file changed

+13
-16
lines changed

1 file changed

+13
-16
lines changed

src/cdk/scrolling/scrollable.ts

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {Directive, ElementRef, OnInit, OnDestroy, NgZone} from '@angular/core';
10-
import {Observable, Subject} from 'rxjs';
9+
import {Directive, ElementRef, NgZone, OnDestroy, OnInit} from '@angular/core';
10+
import {fromEvent, Observable, Subject} from 'rxjs';
11+
import {takeUntil} from 'rxjs/operators';
1112
import {ScrollDispatcher} from './scroll-dispatcher';
1213

1314

@@ -20,36 +21,32 @@ import {ScrollDispatcher} from './scroll-dispatcher';
2021
selector: '[cdk-scrollable], [cdkScrollable]'
2122
})
2223
export class CdkScrollable implements OnInit, OnDestroy {
23-
private _elementScrolled: Subject<Event> = new Subject();
24-
private _scrollListener = (event: Event) => this._elementScrolled.next(event);
24+
private _destroyed = new Subject();
25+
26+
private _elementScrolled: Observable<Event> = Observable.create(observer =>
27+
this._ngZone.runOutsideAngular(() =>
28+
fromEvent(this._elementRef.nativeElement, 'scroll').pipe(takeUntil(this._destroyed))
29+
.subscribe(observer)));
2530

2631
constructor(private _elementRef: ElementRef,
2732
private _scroll: ScrollDispatcher,
2833
private _ngZone: NgZone) {}
2934

3035
ngOnInit() {
31-
this._ngZone.runOutsideAngular(() => {
32-
this.getElementRef().nativeElement.addEventListener('scroll', this._scrollListener);
33-
});
34-
3536
this._scroll.register(this);
3637
}
3738

3839
ngOnDestroy() {
3940
this._scroll.deregister(this);
40-
41-
if (this._scrollListener) {
42-
this.getElementRef().nativeElement.removeEventListener('scroll', this._scrollListener);
43-
}
44-
45-
this._elementScrolled.complete();
41+
this._destroyed.next();
42+
this._destroyed.complete();
4643
}
4744

4845
/**
4946
* Returns observable that emits when a scroll event is fired on the host element.
5047
*/
51-
elementScrolled(): Observable<any> {
52-
return this._elementScrolled.asObservable();
48+
elementScrolled(): Observable<Event> {
49+
return this._elementScrolled;
5350
}
5451

5552
getElementRef(): ElementRef {

0 commit comments

Comments
 (0)