From 02e000eed260aee509d8156ed111ede7979e4167 Mon Sep 17 00:00:00 2001 From: MKirova Date: Tue, 28 Jan 2025 15:53:41 +0200 Subject: [PATCH 1/2] fix(mem-leak): Fix potential memory leaks. --- .../lib/directives/button/button.directive.ts | 21 ++++++++++++------- .../lib/input-group/input-group.component.ts | 6 ++---- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/projects/igniteui-angular/src/lib/directives/button/button.directive.ts b/projects/igniteui-angular/src/lib/directives/button/button.directive.ts index c8009a1cf59..d739bcb6948 100644 --- a/projects/igniteui-angular/src/lib/directives/button/button.directive.ts +++ b/projects/igniteui-angular/src/lib/directives/button/button.directive.ts @@ -7,7 +7,8 @@ import { Output, Renderer2, booleanAttribute, - AfterContentInit + AfterContentInit, + OnDestroy } from '@angular/core'; import { mkenum } from '../../core/utils'; import { IBaseEventArgs } from '../../core/utils'; @@ -46,7 +47,7 @@ export type IgxButtonType = typeof IgxButtonType[keyof typeof IgxButtonType]; selector: '[igxButton]', standalone: true }) -export class IgxButtonDirective extends IgxButtonBaseDirective implements AfterContentInit { +export class IgxButtonDirective extends IgxButtonBaseDirective implements AfterContentInit, OnDestroy { private static ngAcceptInputType_type: IgxButtonType | ''; /** @@ -92,6 +93,12 @@ export class IgxButtonDirective extends IgxButtonBaseDirective implements AfterC */ private _selected = false; + private emitSelected() { + this.buttonSelected.emit({ + button: this + }); + } + /** * Gets or sets whether the button is selected. * Mainly used in the IgxButtonGroup component and it will have no effect if set separately. @@ -121,11 +128,11 @@ export class IgxButtonDirective extends IgxButtonBaseDirective implements AfterC } public ngAfterContentInit() { - this.nativeElement.addEventListener('click', () => { - this.buttonSelected.emit({ - button: this - }); - }); + this.nativeElement.addEventListener('click', this.emitSelected); + } + + public ngOnDestroy(): void { + this.nativeElement.removeEventListener('click', this.emitSelected); } /** diff --git a/projects/igniteui-angular/src/lib/input-group/input-group.component.ts b/projects/igniteui-angular/src/lib/input-group/input-group.component.ts index 6c248c8a504..07a90b22659 100644 --- a/projects/igniteui-angular/src/lib/input-group/input-group.component.ts +++ b/projects/igniteui-angular/src/lib/input-group/input-group.component.ts @@ -219,15 +219,13 @@ export class IgxInputGroupComponent implements IgxInputGroupBase, AfterViewInit private themeToken: ThemeToken ) { this._theme = this.themeToken.theme; - - const { unsubscribe } = this.themeToken.onChange((theme) => { + const themeChange = this.themeToken.onChange((theme) => { if (this._theme !== theme) { this._theme = theme; this.cdr.detectChanges(); } }); - - this._destroyRef.onDestroy(() => unsubscribe); + this._destroyRef.onDestroy(() => themeChange.unsubscribe()); } /** @hidden */ From 0d65a5641059862f635d244c5bbb460d8492d608 Mon Sep 17 00:00:00 2001 From: MKirova Date: Tue, 28 Jan 2025 16:07:51 +0200 Subject: [PATCH 2/2] chore(*): Fix func context. --- .../src/lib/directives/button/button.directive.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/igniteui-angular/src/lib/directives/button/button.directive.ts b/projects/igniteui-angular/src/lib/directives/button/button.directive.ts index d739bcb6948..e414134bfac 100644 --- a/projects/igniteui-angular/src/lib/directives/button/button.directive.ts +++ b/projects/igniteui-angular/src/lib/directives/button/button.directive.ts @@ -128,7 +128,7 @@ export class IgxButtonDirective extends IgxButtonBaseDirective implements AfterC } public ngAfterContentInit() { - this.nativeElement.addEventListener('click', this.emitSelected); + this.nativeElement.addEventListener('click', this.emitSelected.bind(this)); } public ngOnDestroy(): void {