fix(dialog): don't provide directionality if user injector has one already (#10004)

Switches the dialog injector to provide the `Directionality` only when the user-provided injector doesn't have one already.

Relates to #9996.
This commit is contained in:
Kristiyan Kostadinov
2018-02-26 16:05:26 +01:00
committed by Jeremy Elbourn
parent 8a402d06d2
commit e3d7aeccc6
2 changed files with 23 additions and 15 deletions
+11 -7
View File
@@ -264,13 +264,17 @@ export class Dialog {
const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
const injectionTokens = new WeakMap();
injectionTokens.set(this.injector.get(DIALOG_REF), dialogRef);
injectionTokens.set(this.injector.get(DIALOG_CONTAINER), dialogContainer);
injectionTokens.set(DIALOG_DATA, config.data);
injectionTokens.set(Directionality, {
value: config.direction,
change: observableOf()
});
injectionTokens
.set(this.injector.get(DIALOG_REF), dialogRef)
.set(this.injector.get(DIALOG_CONTAINER), dialogContainer)
.set(DIALOG_DATA, config.data);
if (!userInjector || !userInjector.get(Directionality, null)) {
injectionTokens.set(Directionality, {
value: config.direction,
change: observableOf()
});
}
return new PortalInjector(userInjector || this.injector, injectionTokens);
}
+12 -8
View File
@@ -269,17 +269,21 @@ export class MatDialog {
const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
const injectionTokens = new WeakMap();
injectionTokens.set(MatDialogRef, dialogRef);
// The MatDialogContainer is injected in the portal as the MatDialogContainer and the dialog's
// content are created out of the same ViewContainerRef and as such, are siblings for injector
// purposes. To allow the hierarchy that is expected, the MatDialogContainer is explicitly
// purposes. To allow the hierarchy that is expected, the MatDialogContainer is explicitly
// added to the injection tokens.
injectionTokens.set(MatDialogContainer, dialogContainer);
injectionTokens.set(MAT_DIALOG_DATA, config.data);
injectionTokens.set(Directionality, {
value: config.direction,
change: observableOf()
});
injectionTokens
.set(MatDialogContainer, dialogContainer)
.set(MAT_DIALOG_DATA, config.data)
.set(MatDialogRef, dialogRef);
if (!userInjector || !userInjector.get(Directionality, null)) {
injectionTokens.set(Directionality, {
value: config.direction,
change: observableOf()
});
}
return new PortalInjector(userInjector || this._injector, injectionTokens);
}