fix(ivy): ensure that the correct document
is available (#33712)
Most of the use of `document` in the framework is within the DI so they just inject the `DOCUMENT` token and are done. Ivy is special because it does not rely upon the DI and must get hold of the document some other way. There are a limited number of places relevant to ivy that currently consume a global document object. The solution is modelled on the `LOCALE_ID` approach, which has `getLocaleId()` and `setLocaleId()` top-level functions for ivy (see `core/src/render3/i18n.ts`). In the rest of Angular (i.e. using DI) the `LOCALE_ID` token has a provider that also calls setLocaleId() to ensure that ivy has the same value. This commit defines `getDocument()` and `setDocument() `top-level functions for ivy. Wherever ivy needs the global `document`, it calls `getDocument()` instead. Each of the platforms (e.g. Browser, Server, WebWorker) have providers for `DOCUMENT`. In each of those providers they also call `setDocument()` accordingly. Fixes #33651 PR Close #33712
This commit is contained in:

committed by
Kara Erickson

parent
5b292bf125
commit
83626962cf
@ -8,15 +8,15 @@
|
||||
|
||||
/**
|
||||
* The goal here is to make sure that the browser DOM API is the Renderer.
|
||||
* We do this by defining a subset of DOM API to be the renderer and than
|
||||
* use that time for rendering.
|
||||
* We do this by defining a subset of DOM API to be the renderer and then
|
||||
* use that at runtime for rendering.
|
||||
*
|
||||
* At runtime we can then use the DOM api directly, in server or web-worker
|
||||
* it will be easy to implement such API.
|
||||
*/
|
||||
|
||||
import {RendererStyleFlags2, RendererType2} from '../../render/api';
|
||||
|
||||
import {getDocument} from './document';
|
||||
|
||||
// TODO: cleanup once the code is merged in angular/angular
|
||||
export enum RendererStyleFlags3 {
|
||||
@ -105,7 +105,7 @@ export interface RendererFactory3 {
|
||||
|
||||
export const domRendererFactory3: RendererFactory3 = {
|
||||
createRenderer: (hostElement: RElement | null, rendererType: RendererType2 | null):
|
||||
Renderer3 => { return document;}
|
||||
Renderer3 => { return getDocument();}
|
||||
};
|
||||
|
||||
/** Subset of API needed for appending elements and text nodes. */
|
||||
|
Reference in New Issue
Block a user