diff --git a/src/lib/icon/icon-registry.ts b/src/lib/icon/icon-registry.ts index 2d6c2bac5f4..cf0c3a0afa6 100644 --- a/src/lib/icon/icon-registry.ts +++ b/src/lib/icon/icon-registry.ts @@ -15,6 +15,7 @@ import { Optional, SecurityContext, SkipSelf, + OnDestroy, } from '@angular/core'; import {DomSanitizer, SafeResourceUrl, SafeHtml} from '@angular/platform-browser'; import {forkJoin, Observable, of as observableOf, throwError as observableThrow} from 'rxjs'; @@ -93,7 +94,7 @@ class SvgIconConfig { * - Loads icons from URLs and extracts individual icons from icon sets. */ @Injectable({providedIn: 'root'}) -export class MatIconRegistry { +export class MatIconRegistry implements OnDestroy { private _document: Document; /** @@ -310,6 +311,12 @@ export class MatIconRegistry { return observableThrow(getMatIconNameNotFoundError(key)); } + ngOnDestroy() { + this._svgIconConfigs.clear(); + this._iconSetConfigs.clear(); + this._cachedIconsByUrl.clear(); + } + /** * Returns the cached icon for a SvgIconConfig if available, or fetches it from its URL if not. */ diff --git a/tools/public_api_guard/lib/icon.d.ts b/tools/public_api_guard/lib/icon.d.ts index 08e30d52d72..fcf6153a654 100644 --- a/tools/public_api_guard/lib/icon.d.ts +++ b/tools/public_api_guard/lib/icon.d.ts @@ -45,7 +45,7 @@ export interface MatIconLocation { export declare class MatIconModule { } -export declare class MatIconRegistry { +export declare class MatIconRegistry implements OnDestroy { constructor(_httpClient: HttpClient, _sanitizer: DomSanitizer, document: any); addSvgIcon(iconName: string, url: SafeResourceUrl): this; addSvgIconInNamespace(namespace: string, iconName: string, url: SafeResourceUrl): this; @@ -59,6 +59,7 @@ export declare class MatIconRegistry { getDefaultFontSetClass(): string; getNamedSvgIcon(name: string, namespace?: string): Observable; getSvgIconFromUrl(safeUrl: SafeResourceUrl): Observable; + ngOnDestroy(): void; registerFontClassAlias(alias: string, className?: string): this; setDefaultFontSetClass(className: string): this; }