Skip to content

Commit a1db4e4

Browse files
crisbetojelbourn
authored andcommitted
fix(overlay): server-side rendering error when creating backdrop element (#9448)
Avoids a couple of server-side rendering errors when the overlay's backdrop is being created.
1 parent f1c3e2c commit a1db4e4

File tree

2 files changed

+24
-10
lines changed

2 files changed

+24
-10
lines changed

src/cdk/overlay/overlay-ref.ts

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ export class OverlayRef implements PortalOutlet {
3939
private _pane: HTMLElement,
4040
private _config: ImmutableObject<OverlayConfig>,
4141
private _ngZone: NgZone,
42-
private _keyboardDispatcher: OverlayKeyboardDispatcher) {
42+
private _keyboardDispatcher: OverlayKeyboardDispatcher,
43+
private _document: Document) {
4344

4445
if (_config.scrollStrategy) {
4546
_config.scrollStrategy.attach(this);
@@ -259,7 +260,9 @@ export class OverlayRef implements PortalOutlet {
259260

260261
/** Attaches a backdrop for this overlay. */
261262
private _attachBackdrop() {
262-
this._backdropElement = document.createElement('div');
263+
const showingClass = 'cdk-overlay-backdrop-showing';
264+
265+
this._backdropElement = this._document.createElement('div');
263266
this._backdropElement.classList.add('cdk-overlay-backdrop');
264267

265268
if (this._config.backdropClass) {
@@ -275,13 +278,17 @@ export class OverlayRef implements PortalOutlet {
275278
this._backdropElement.addEventListener('click', () => this._backdropClick.next(null));
276279

277280
// Add class to fade-in the backdrop after one frame.
278-
this._ngZone.runOutsideAngular(() => {
279-
requestAnimationFrame(() => {
280-
if (this._backdropElement) {
281-
this._backdropElement.classList.add('cdk-overlay-backdrop-showing');
282-
}
281+
if (typeof requestAnimationFrame !== 'undefined') {
282+
this._ngZone.runOutsideAngular(() => {
283+
requestAnimationFrame(() => {
284+
if (this._backdropElement) {
285+
this._backdropElement.classList.add(showingClass);
286+
}
287+
});
283288
});
284-
});
289+
} else {
290+
this._backdropElement.classList.add(showingClass);
291+
}
285292
}
286293

287294
/**

src/cdk/overlay/overlay.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,15 @@ export class Overlay {
5757
create(config?: OverlayConfig): OverlayRef {
5858
const pane = this._createPaneElement();
5959
const portalOutlet = this._createPortalOutlet(pane);
60-
return new OverlayRef(portalOutlet, pane, new OverlayConfig(config), this._ngZone,
61-
this._keyboardDispatcher);
60+
61+
return new OverlayRef(
62+
portalOutlet,
63+
pane,
64+
new OverlayConfig(config),
65+
this._ngZone,
66+
this._keyboardDispatcher,
67+
this._document
68+
);
6269
}
6370

6471
/**

0 commit comments

Comments
 (0)