diff --git a/components/tooltip/base/nz-tooltip-base.directive.ts b/components/tooltip/base/nz-tooltip-base.directive.ts index 333d71e725e..32c45fdd0b0 100644 --- a/components/tooltip/base/nz-tooltip-base.directive.ts +++ b/components/tooltip/base/nz-tooltip-base.directive.ts @@ -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) { @@ -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(); @@ -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; + } + } }