diff --git a/goldens/public-api/core/errors.md b/goldens/public-api/core/errors.md index c433d0ea21e..3838e00d62b 100644 --- a/goldens/public-api/core/errors.md +++ b/goldens/public-api/core/errors.md @@ -75,6 +75,8 @@ export const enum RuntimeErrorCode { // (undocumented) RECURSIVE_APPLICATION_REF_TICK = 101, // (undocumented) + RENDERER_NOT_FOUND = 407, + // (undocumented) TEMPLATE_STRUCTURE_ERROR = 305, // (undocumented) TYPE_IS_NOT_STANDALONE = 907, diff --git a/packages/core/src/errors.ts b/packages/core/src/errors.ts index 89fd475d8ff..003f795e977 100644 --- a/packages/core/src/errors.ts +++ b/packages/core/src/errors.ts @@ -50,6 +50,7 @@ export const enum RuntimeErrorCode { PLATFORM_ALREADY_DESTROYED = 404, ASYNC_INITIALIZERS_STILL_RUNNING = 405, APPLICATION_REF_ALREADY_DESTROYED = 406, + RENDERER_NOT_FOUND = 407, // Styling Errors diff --git a/packages/core/src/render3/component_ref.ts b/packages/core/src/render3/component_ref.ts index 1c37c463791..4ac1ba80d4b 100644 --- a/packages/core/src/render3/component_ref.ts +++ b/packages/core/src/render3/component_ref.ts @@ -11,6 +11,7 @@ import {Injector} from '../di/injector'; import {InjectFlags} from '../di/interface/injector'; import {ProviderToken} from '../di/provider_token'; import {EnvironmentInjector} from '../di/r3_injector'; +import {RuntimeError, RuntimeErrorCode} from '../errors'; import {Type} from '../interface/type'; import {ComponentFactory as viewEngine_ComponentFactory, ComponentRef as viewEngine_ComponentRef} from '../linker/component_factory'; import {ComponentFactoryResolver as viewEngine_ComponentFactoryResolver} from '../linker/component_factory_resolver'; @@ -28,7 +29,6 @@ import {NodeInjector} from './di'; import {createLView, createTView, locateHostElement, renderView} from './instructions/shared'; import {ComponentDef} from './interfaces/definition'; import {TContainerNode, TElementContainerNode, TElementNode, TNode} from './interfaces/node'; -import {domRendererFactory3, RendererFactory} from './interfaces/renderer'; import {RNode} from './interfaces/renderer_dom'; import {HEADER_OFFSET, LView, LViewFlags, TViewType} from './interfaces/view'; import {MATH_ML_NAMESPACE, SVG_NAMESPACE} from './namespaces'; @@ -144,9 +144,15 @@ export class ComponentFactory extends viewEngine_ComponentFactory { const rootViewInjector = realEnvironmentInjector ? new ChainedInjector(injector, realEnvironmentInjector) : injector; - const rendererFactory = - rootViewInjector.get(RendererFactory2, domRendererFactory3 as RendererFactory2) as - RendererFactory; + const rendererFactory = rootViewInjector.get(RendererFactory2, null); + if (rendererFactory === null) { + throw new RuntimeError( + RuntimeErrorCode.RENDERER_NOT_FOUND, + ngDevMode && + 'Angular was not able to inject a renderer (RendererFactory2). ' + + 'Likely this is due to a broken DI hierarchy. ' + + 'Make sure that any injector used to create this component has a correct parent.'); + } const sanitizer = rootViewInjector.get(Sanitizer, null); const hostRenderer = rendererFactory.createRenderer(null, this.componentDef); diff --git a/packages/core/test/bundling/animations/bundle.golden_symbols.json b/packages/core/test/bundling/animations/bundle.golden_symbols.json index cb6807bd6b7..a95927a3124 100644 --- a/packages/core/test/bundling/animations/bundle.golden_symbols.json +++ b/packages/core/test/bundling/animations/bundle.golden_symbols.json @@ -722,9 +722,6 @@ { "name": "diPublicInInjector" }, - { - "name": "domRendererFactory3" - }, { "name": "empty" }, diff --git a/packages/core/test/bundling/cyclic_import/bundle.golden_symbols.json b/packages/core/test/bundling/cyclic_import/bundle.golden_symbols.json index dc04f5c827b..61284fe6c14 100644 --- a/packages/core/test/bundling/cyclic_import/bundle.golden_symbols.json +++ b/packages/core/test/bundling/cyclic_import/bundle.golden_symbols.json @@ -509,9 +509,6 @@ { "name": "diPublicInInjector" }, - { - "name": "domRendererFactory3" - }, { "name": "empty" }, diff --git a/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json b/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json index 15c9a3ad004..c381a42d5d3 100644 --- a/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json +++ b/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json @@ -743,9 +743,6 @@ { "name": "diPublicInInjector" }, - { - "name": "domRendererFactory3" - }, { "name": "empty" }, diff --git a/packages/core/test/bundling/forms_template_driven/bundle.golden_symbols.json b/packages/core/test/bundling/forms_template_driven/bundle.golden_symbols.json index be3689fb492..67d1ab37a46 100644 --- a/packages/core/test/bundling/forms_template_driven/bundle.golden_symbols.json +++ b/packages/core/test/bundling/forms_template_driven/bundle.golden_symbols.json @@ -716,9 +716,6 @@ { "name": "diPublicInInjector" }, - { - "name": "domRendererFactory3" - }, { "name": "empty" }, diff --git a/packages/core/test/bundling/hello_world/bundle.golden_symbols.json b/packages/core/test/bundling/hello_world/bundle.golden_symbols.json index 0e2dc92658d..887a506d4b3 100644 --- a/packages/core/test/bundling/hello_world/bundle.golden_symbols.json +++ b/packages/core/test/bundling/hello_world/bundle.golden_symbols.json @@ -365,9 +365,6 @@ { "name": "detachMovedView" }, - { - "name": "domRendererFactory3" - }, { "name": "empty" }, diff --git a/packages/core/test/bundling/router/bundle.golden_symbols.json b/packages/core/test/bundling/router/bundle.golden_symbols.json index 9fba68e4330..011e910f53e 100644 --- a/packages/core/test/bundling/router/bundle.golden_symbols.json +++ b/packages/core/test/bundling/router/bundle.golden_symbols.json @@ -1028,9 +1028,6 @@ { "name": "dispatch" }, - { - "name": "domRendererFactory3" - }, { "name": "empty" }, diff --git a/packages/core/test/bundling/standalone_bootstrap/bundle.golden_symbols.json b/packages/core/test/bundling/standalone_bootstrap/bundle.golden_symbols.json index 422e106b453..2f807cf07c8 100644 --- a/packages/core/test/bundling/standalone_bootstrap/bundle.golden_symbols.json +++ b/packages/core/test/bundling/standalone_bootstrap/bundle.golden_symbols.json @@ -434,9 +434,6 @@ { "name": "detachMovedView" }, - { - "name": "domRendererFactory3" - }, { "name": "empty" }, diff --git a/packages/core/test/bundling/todo/bundle.golden_symbols.json b/packages/core/test/bundling/todo/bundle.golden_symbols.json index b6a26af5535..d95b7b1bea0 100644 --- a/packages/core/test/bundling/todo/bundle.golden_symbols.json +++ b/packages/core/test/bundling/todo/bundle.golden_symbols.json @@ -626,9 +626,6 @@ { "name": "diPublicInInjector" }, - { - "name": "domRendererFactory3" - }, { "name": "empty" },