From 7e0b3be2c93e79a51ea9dfe35dc10761dd2326c6 Mon Sep 17 00:00:00 2001 From: arturovt Date: Mon, 15 Jun 2026 22:22:08 +0300 Subject: [PATCH] docs: add error guide for NG05102 Adds an error reference page for NG05102 (UNSUPPORTED_EVENT_TARGET) explaining what triggers it and how to fix it. Also marks the error code as negative (-5102) so that in dev mode the error message automatically links to the new guide page on angular.dev/errors, consistent with other documented runtime errors. --- adev/src/content/reference/errors/NG05102.md | 44 +++++++++++++++++++ .../public-api/platform-browser/errors.api.md | 2 +- packages/platform-browser/src/errors.ts | 2 +- 3 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 adev/src/content/reference/errors/NG05102.md diff --git a/adev/src/content/reference/errors/NG05102.md b/adev/src/content/reference/errors/NG05102.md new file mode 100644 index 000000000000..b4f1fc0660c8 --- /dev/null +++ b/adev/src/content/reference/errors/NG05102.md @@ -0,0 +1,44 @@ +# Unsupported event target + +Angular only recognizes three string values as global event targets: `'window'`, `'document'`, and `'body'`. If you pass anything else as a string target when registering a global event listener, Angular can't resolve it and throws this error. + +## Debugging the error + +Check for a typo in the target name used with `@HostListener` or `Renderer2.listen()`. A small mistake like `'windw'` instead of `'window'` is enough to trigger this: + +```angular-ts +@Component({ + selector: 'app-example', + template: '', +}) +export class ExampleComponent { + @HostListener('windw:resize') // typo — should be 'window' + onResize() {} +} +``` + +The same applies when calling `Renderer2.listen()` directly with a string that Angular doesn't know about: + +```typescript +this.renderer.listen('global', 'click', handler); // 'global' is not supported +``` + +## Fixing the error + +Correct the target to one of the three supported strings, or pass an actual DOM element instead of a string: + +```angular-ts +@Component({ + selector: 'app-example', + template: '', +}) +export class ExampleComponent { + @HostListener('window:resize') + onResize() {} +} +``` + +```typescript +// Use an element reference when you need to target something more specific +this.renderer.listen(this.elementRef.nativeElement, 'click', handler); +``` diff --git a/goldens/public-api/platform-browser/errors.api.md b/goldens/public-api/platform-browser/errors.api.md index ead51d7ea4fe..7e3b74437a69 100644 --- a/goldens/public-api/platform-browser/errors.api.md +++ b/goldens/public-api/platform-browser/errors.api.md @@ -27,7 +27,7 @@ export const enum RuntimeErrorCode { // (undocumented) UNEXPECTED_SYNTHETIC_PROPERTY = 5105, // (undocumented) - UNSUPPORTED_EVENT_TARGET = 5102, + UNSUPPORTED_EVENT_TARGET = -5102, // (undocumented) UNSUPPORTED_ZONEJS_INSTANCE = -5000 } diff --git a/packages/platform-browser/src/errors.ts b/packages/platform-browser/src/errors.ts index 432b6382594b..ad779489f0be 100644 --- a/packages/platform-browser/src/errors.ts +++ b/packages/platform-browser/src/errors.ts @@ -17,7 +17,7 @@ export const enum RuntimeErrorCode { // misc errors (5100-5200 range) BROWSER_MODULE_ALREADY_LOADED = 5100, NO_PLUGIN_FOR_EVENT = 5101, - UNSUPPORTED_EVENT_TARGET = 5102, + UNSUPPORTED_EVENT_TARGET = -5102, TESTABILITY_NOT_FOUND = 5103, ROOT_NODE_NOT_FOUND = -5104, UNEXPECTED_SYNTHETIC_PROPERTY = 5105,