mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
Fixes an issue where destroy hooks are not set up for `useClass` providers that rely on `forwardRef` for passing the actual class reference. Currently the destroy hooks are not captured because forward refs are not resolved for class providers. In ES2015+ this issue becomes even more critical if arrow-functions are used for e.g. `useClass: () => forwardRef(..)`. This is because arrow functions do not have a prototype, unlike in ES5 where the function assigned to `useClass` would always have a prototype. In ES2015+ a runtime exception as followed is returned (and doesn't give any useful indication of the forwardRef issue): ``` TypeError: Cannot read properties of undefined (reading 'ngOnDestroy') at registerDestroyHooksIfSupported (dist/packages/core/src/render3/di_setup.ts:196:35 <- dist/legacy-test-bundle.spec.js:41508:37) at resolveProvider (dist/packages/core/src/render3/di_setup.ts:153:9 <- dist/legacy-test-bundle.spec.js:41485:11) at resolveProvider (dist/packages/core/src/render3/di_setup.ts:70:7 <- dist/legacy-test-bundle.spec.js:41445:9) at providersResolver (dist/packages/core/src/render3/di_setup.ts:54:5 <- dist/legacy-test-bundle.spec.js:41438:7) at Object.definition.providersResolver (dist/packages/core/src/render3/features/providers_feature.ts:48:18 <- dist/legacy-test-bundle.spec.js:41600:16) at resolveDirectives (dist/packages/core/src/render3/instructions/shared.ts:1179:40 <- dist/legacy-test-bundle.spec.js:35611:17) at elementStartFirstCreatePass (dist/packages/core/src/render3/instructions/element.ts:40:7 <- dist/legacy-test-bundle.spec.js:38432:27) at ɵɵelementStart (dist/packages/core/src/render3/instructions/element.ts:87:7 <- dist/legacy-test-bundle.spec.js:38453:43) at ɵɵelement (dist/packages/core/src/render3/instructions/element.ts:180:3 <- dist/legacy-test-bundle.spec.js:38510:5) at MultipleFormControls_Template (ng:///MultipleFormControls.js:9:9) ``` PR Close #44281
5 lines
54 B
JSON
5 lines
54 B
JSON
{
|
|
"compilerOptions": {
|
|
"target": "es2015"
|
|
}
|
|
}
|