mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
refactor(core): disable automatic usage of Renderer3 (#46605)
Previously, when instantiating a component, Angular would look in the DI hierarchy for `RendererFactory2`. Any DI tree which rolls up through an application injector (that is, one created with `BrowserModule`) should be able to provide this interface. If not found, Angular would switch to the experimental `Renderer3` mechanism. This switch was designed this way, because it allowed for the creation of experimental applications where `RendererFactory2` was not included in the bundle at all. In this commit, instead of automatically falling back on `Renderer3`-style rendering, an error is raised instead if `RendererFactory2` is missing from the DI hierarchy. PR Close #46605
This commit is contained in:
parent
31b396d49c
commit
af600cd2b7
11 changed files with 13 additions and 28 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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<T> extends viewEngine_ComponentFactory<T> {
|
|||
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);
|
||||
|
|
|
|||
|
|
@ -722,9 +722,6 @@
|
|||
{
|
||||
"name": "diPublicInInjector"
|
||||
},
|
||||
{
|
||||
"name": "domRendererFactory3"
|
||||
},
|
||||
{
|
||||
"name": "empty"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -509,9 +509,6 @@
|
|||
{
|
||||
"name": "diPublicInInjector"
|
||||
},
|
||||
{
|
||||
"name": "domRendererFactory3"
|
||||
},
|
||||
{
|
||||
"name": "empty"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -743,9 +743,6 @@
|
|||
{
|
||||
"name": "diPublicInInjector"
|
||||
},
|
||||
{
|
||||
"name": "domRendererFactory3"
|
||||
},
|
||||
{
|
||||
"name": "empty"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -716,9 +716,6 @@
|
|||
{
|
||||
"name": "diPublicInInjector"
|
||||
},
|
||||
{
|
||||
"name": "domRendererFactory3"
|
||||
},
|
||||
{
|
||||
"name": "empty"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -365,9 +365,6 @@
|
|||
{
|
||||
"name": "detachMovedView"
|
||||
},
|
||||
{
|
||||
"name": "domRendererFactory3"
|
||||
},
|
||||
{
|
||||
"name": "empty"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1028,9 +1028,6 @@
|
|||
{
|
||||
"name": "dispatch"
|
||||
},
|
||||
{
|
||||
"name": "domRendererFactory3"
|
||||
},
|
||||
{
|
||||
"name": "empty"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -434,9 +434,6 @@
|
|||
{
|
||||
"name": "detachMovedView"
|
||||
},
|
||||
{
|
||||
"name": "domRendererFactory3"
|
||||
},
|
||||
{
|
||||
"name": "empty"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -626,9 +626,6 @@
|
|||
{
|
||||
"name": "diPublicInInjector"
|
||||
},
|
||||
{
|
||||
"name": "domRendererFactory3"
|
||||
},
|
||||
{
|
||||
"name": "empty"
|
||||
},
|
||||
|
|
|
|||
Loading…
Reference in a new issue