@@ -57,6 +57,7 @@ import {
5757} from '@angular/material/core' ;
5858import { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations' ;
5959import { normalizePassiveListenerOptions } from '@angular/cdk/platform' ;
60+ import { DOCUMENT } from '@angular/common' ;
6061import { Subscription } from 'rxjs' ;
6162
6263const activeEventOptions = normalizePassiveListenerOptions ( { passive : false } ) ;
@@ -483,6 +484,9 @@ export class MatSlider extends _MatSliderMixinBase
483484 /** Keeps track of the last pointer event that was captured by the slider. */
484485 private _lastPointerEvent : MouseEvent | TouchEvent | null ;
485486
487+ /** Used to subscribe to global move and end events */
488+ protected _document ?: Document ;
489+
486490 constructor ( elementRef : ElementRef ,
487491 private _focusMonitor : FocusMonitor ,
488492 private _changeDetectorRef : ChangeDetectorRef ,
@@ -491,9 +495,13 @@ export class MatSlider extends _MatSliderMixinBase
491495 // @breaking -change 8.0.0 `_animationMode` parameter to be made required.
492496 @Optional ( ) @Inject ( ANIMATION_MODULE_TYPE ) public _animationMode ?: string ,
493497 // @breaking -change 9.0.0 `_ngZone` parameter to be made required.
494- private _ngZone ?: NgZone ) {
498+ private _ngZone ?: NgZone ,
499+ /** @breaking -change 11.0.0 make document required */
500+ @Optional ( ) @Inject ( DOCUMENT ) document ?: any ) {
495501 super ( elementRef ) ;
496502
503+ this . _document = document ;
504+
497505 this . tabIndex = parseInt ( tabIndex ) || 0 ;
498506
499507 this . _runOutsizeZone ( ( ) => {
@@ -691,8 +699,8 @@ export class MatSlider extends _MatSliderMixinBase
691699 * as they're swiping across the screen.
692700 */
693701 private _bindGlobalEvents ( triggerEvent : TouchEvent | MouseEvent ) {
694- if ( typeof document !== 'undefined' && document ) {
695- const body = document . body ;
702+ if ( typeof this . _document !== 'undefined' && this . _document ) {
703+ const body = this . _document . body ;
696704 const isTouch = isTouchEvent ( triggerEvent ) ;
697705 const moveEventName = isTouch ? 'touchmove' : 'mousemove' ;
698706 const endEventName = isTouch ? 'touchend' : 'mouseup' ;
@@ -710,8 +718,8 @@ export class MatSlider extends _MatSliderMixinBase
710718
711719 /** Removes any global event listeners that we may have added. */
712720 private _removeGlobalEvents ( ) {
713- if ( typeof document !== 'undefined' && document ) {
714- const body = document . body ;
721+ if ( typeof this . _document !== 'undefined' && this . _document ) {
722+ const body = this . _document . body ;
715723 body . removeEventListener ( 'mousemove' , this . _pointerMove , activeEventOptions ) ;
716724 body . removeEventListener ( 'mouseup' , this . _pointerUp , activeEventOptions ) ;
717725 body . removeEventListener ( 'touchmove' , this . _pointerMove , activeEventOptions ) ;
0 commit comments