Skip to content

Commit

Permalink
fix(tooltip): remove native event listener on component destroy (#5144)
Browse files Browse the repository at this point in the history
* fix(tooltip): remove native event listener on component destroy

Component should clean up events it has registered to.

Closes #4499

* Break at higher syntactic level

* Undo accidental formatting
  • Loading branch information
michastreppel authored and mmalerba committed Jul 7, 2017
1 parent 68241a8 commit 32db2ba
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions src/lib/tooltip/tooltip.ts
Expand Up @@ -170,6 +170,9 @@ export class MdTooltip implements OnDestroy {
get _matClass() { return this.tooltipClass; }
set _matClass(v) { this.tooltipClass = v; }

private _enterListener: Function;
private _leaveListener: Function;

constructor(
private _overlay: Overlay,
private _elementRef: ElementRef,
Expand All @@ -183,8 +186,10 @@ export class MdTooltip implements OnDestroy {
// The mouse events shouldn't be bound on iOS devices, because
// they can prevent the first tap from firing its click event.
if (!_platform.IOS) {
_renderer.listen(_elementRef.nativeElement, 'mouseenter', () => this.show());
_renderer.listen(_elementRef.nativeElement, 'mouseleave', () => this.hide());
this._enterListener =
_renderer.listen(_elementRef.nativeElement, 'mouseenter', () => this.show());
this._leaveListener =
_renderer.listen(_elementRef.nativeElement, 'mouseleave', () => this.hide());
}
}

Expand All @@ -195,6 +200,11 @@ export class MdTooltip implements OnDestroy {
if (this._tooltipInstance) {
this._disposeTooltip();
}
// Clean up the event listeners set in the constructor
if (!this._platform.IOS) {
this._enterListener();
this._leaveListener();
}
}

/** Shows the tooltip after the delay in ms, defaults to tooltip-delay-show or 0ms if no input */
Expand Down

0 comments on commit 32db2ba

Please sign in to comment.