Skip to content

Commit

Permalink
fix(module:tooltip): fix tooltip accessing destroyed view (#4387)
Browse files Browse the repository at this point in the history
close #3875
close #4317
close #4386
  • Loading branch information
Wendell authored and chensimeng committed Nov 8, 2019
1 parent cf22133 commit 8e9e6a9
Showing 1 changed file with 14 additions and 4 deletions.
18 changes: 14 additions & 4 deletions components/tooltip/base/nz-tooltip-base.directive.ts
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,10 @@ export abstract class NzTooltipBaseDirective implements OnChanges, OnInit, OnDes
ngOnDestroy(): void {
this.$destroy.next();
this.$destroy.complete();

// Clear toggling timer. Issue #3875 #4317 #4386
this.hide();
this.clearTogglingTimer();
this.removeTriggerListeners();

if (this.tooltipRef) {
Expand Down Expand Up @@ -338,10 +342,9 @@ export abstract class NzTooltipBaseDirective implements OnChanges, OnInit, OnDes
}

private delayEnterLeave(isOrigin: boolean, isEnter: boolean, delay: number = -1): void {
if (this.delayTimer) {
clearTimeout(this.delayTimer);
this.delayTimer = undefined;
} else if (delay > 0) {
this.clearTogglingTimer();

if (delay > 0) {
this.delayTimer = setTimeout(() => {
this.delayTimer = undefined;
isEnter ? this.show() : this.hide();
Expand All @@ -357,4 +360,11 @@ export abstract class NzTooltipBaseDirective implements OnChanges, OnInit, OnDes
this.triggerUnlisteners.forEach(cancel => cancel());
this.triggerUnlisteners.length = 0;
}

private clearTogglingTimer(): void {
if (this.delayTimer) {
clearTimeout(this.delayTimer);
this.delayTimer = undefined;
}
}
}

0 comments on commit 8e9e6a9

Please sign in to comment.