fix(tooltip): remove native event listener on component destroy (#5144)

* 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
This commit is contained in:
michastreppel
2017-07-07 19:06:22 +02:00
committed by mmalerba
parent 68241a8640
commit 32db2bafea
+12 -2
View File
@@ -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,
@@ -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());
}
}
@@ -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 */