diff --git a/src/lib/snack-bar/snack-bar-ref.ts b/src/lib/snack-bar/snack-bar-ref.ts index c4e45c59a67f..9743fe9e8366 100644 --- a/src/lib/snack-bar/snack-bar-ref.ts +++ b/src/lib/snack-bar/snack-bar-ref.ts @@ -31,6 +31,9 @@ export class MdSnackBarRef { /** Subject for notifying the user that the snack bar action was called. */ private _onAction: Subject = new Subject(); + /** Timeout handle for the dismiss timeout cleanup. */ + private _dismissTimeoutHandle: number; + constructor(instance: T, containerInstance: MdSnackBarContainer, private _overlayRef: OverlayRef) { @@ -47,6 +50,12 @@ export class MdSnackBarRef { if (!this._afterClosed.closed) { this.containerInstance.exit(); } + clearTimeout(this._dismissTimeoutHandle); + } + + /** Dismisses the snack bar after some duration */ + dismissAfter(duration: number): void { + this._dismissTimeoutHandle = setTimeout(() => this.dismiss(), duration); } /** Marks the snackbar action clicked. */ diff --git a/src/lib/snack-bar/snack-bar.ts b/src/lib/snack-bar/snack-bar.ts index 473bd0ef8925..44f270eebf91 100644 --- a/src/lib/snack-bar/snack-bar.ts +++ b/src/lib/snack-bar/snack-bar.ts @@ -81,7 +81,7 @@ export class MdSnackBar { // If a dismiss timeout is provided, set up dismiss based on after the snackbar is opened. if (config.duration > 0) { snackBarRef.afterOpened().subscribe(() => { - setTimeout(() => snackBarRef.dismiss(), config.duration); + snackBarRef.dismissAfter(config.duration); }); }