Skip to content

Commit b3e4d57

Browse files
authored
feat(cdk/overlay): add disposeOnNavigation (#27672)
add disposeOnNavigation to overlay directive fixes #27545
1 parent 5d65f1d commit b3e4d57

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

src/cdk/overlay/overlay-directives.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {
2424
SimpleChanges,
2525
TemplateRef,
2626
ViewContainerRef,
27+
booleanAttribute,
2728
} from '@angular/core';
2829
import {Subscription} from 'rxjs';
2930
import {takeWhile} from 'rxjs/operators';
@@ -112,6 +113,7 @@ export class CdkConnectedOverlay implements OnDestroy, OnChanges {
112113
private _offsetY: number;
113114
private _position: FlexibleConnectedPositionStrategy;
114115
private _scrollStrategyFactory: () => ScrollStrategy;
116+
private _disposeOnNavigation = false;
115117

116118
/** Origin for the connected overlay. */
117119
@Input('cdkConnectedOverlayOrigin')
@@ -230,6 +232,15 @@ export class CdkConnectedOverlay implements OnDestroy, OnChanges {
230232
this._push = coerceBooleanProperty(value);
231233
}
232234

235+
/** Whether the overlay should be disposed of when the user goes backwards/forwards in history. */
236+
@Input({alias: 'cdkConnectedOverlayDisposeOnNavigation', transform: booleanAttribute})
237+
get disposeOnNavigation(): boolean {
238+
return this._disposeOnNavigation;
239+
}
240+
set disposeOnNavigation(value: boolean) {
241+
this._disposeOnNavigation = value;
242+
}
243+
233244
/** Event emitted when the backdrop is clicked. */
234245
@Output() readonly backdropClick = new EventEmitter<MouseEvent>();
235246

@@ -335,6 +346,7 @@ export class CdkConnectedOverlay implements OnDestroy, OnChanges {
335346
positionStrategy,
336347
scrollStrategy: this.scrollStrategy,
337348
hasBackdrop: this.hasBackdrop,
349+
disposeOnNavigation: this.disposeOnNavigation,
338350
});
339351

340352
if (this.width || this.width === 0) {

tools/public_api_guard/cdk/overlay.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ export class CdkConnectedOverlay implements OnDestroy, OnChanges {
5353
readonly detach: EventEmitter<void>;
5454
get dir(): Direction;
5555
disableClose: boolean;
56+
get disposeOnNavigation(): boolean;
57+
set disposeOnNavigation(value: boolean);
5658
get flexibleDimensions(): boolean;
5759
set flexibleDimensions(value: BooleanInput);
5860
get growAfterOpen(): boolean;
@@ -65,6 +67,8 @@ export class CdkConnectedOverlay implements OnDestroy, OnChanges {
6567
minHeight: number | string;
6668
minWidth: number | string;
6769
// (undocumented)
70+
static ngAcceptInputType_disposeOnNavigation: unknown;
71+
// (undocumented)
6872
ngOnChanges(changes: SimpleChanges): void;
6973
// (undocumented)
7074
ngOnDestroy(): void;
@@ -88,7 +92,7 @@ export class CdkConnectedOverlay implements OnDestroy, OnChanges {
8892
viewportMargin: number;
8993
width: number | string;
9094
// (undocumented)
91-
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkConnectedOverlay, "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", ["cdkConnectedOverlay"], { "origin": { "alias": "cdkConnectedOverlayOrigin"; "required": false; }; "positions": { "alias": "cdkConnectedOverlayPositions"; "required": false; }; "positionStrategy": { "alias": "cdkConnectedOverlayPositionStrategy"; "required": false; }; "offsetX": { "alias": "cdkConnectedOverlayOffsetX"; "required": false; }; "offsetY": { "alias": "cdkConnectedOverlayOffsetY"; "required": false; }; "width": { "alias": "cdkConnectedOverlayWidth"; "required": false; }; "height": { "alias": "cdkConnectedOverlayHeight"; "required": false; }; "minWidth": { "alias": "cdkConnectedOverlayMinWidth"; "required": false; }; "minHeight": { "alias": "cdkConnectedOverlayMinHeight"; "required": false; }; "backdropClass": { "alias": "cdkConnectedOverlayBackdropClass"; "required": false; }; "panelClass": { "alias": "cdkConnectedOverlayPanelClass"; "required": false; }; "viewportMargin": { "alias": "cdkConnectedOverlayViewportMargin"; "required": false; }; "scrollStrategy": { "alias": "cdkConnectedOverlayScrollStrategy"; "required": false; }; "open": { "alias": "cdkConnectedOverlayOpen"; "required": false; }; "disableClose": { "alias": "cdkConnectedOverlayDisableClose"; "required": false; }; "transformOriginSelector": { "alias": "cdkConnectedOverlayTransformOriginOn"; "required": false; }; "hasBackdrop": { "alias": "cdkConnectedOverlayHasBackdrop"; "required": false; }; "lockPosition": { "alias": "cdkConnectedOverlayLockPosition"; "required": false; }; "flexibleDimensions": { "alias": "cdkConnectedOverlayFlexibleDimensions"; "required": false; }; "growAfterOpen": { "alias": "cdkConnectedOverlayGrowAfterOpen"; "required": false; }; "push": { "alias": "cdkConnectedOverlayPush"; "required": false; }; }, { "backdropClick": "backdropClick"; "positionChange": "positionChange"; "attach": "attach"; "detach": "detach"; "overlayKeydown": "overlayKeydown"; "overlayOutsideClick": "overlayOutsideClick"; }, never, never, true, never>;
95+
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkConnectedOverlay, "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", ["cdkConnectedOverlay"], { "origin": { "alias": "cdkConnectedOverlayOrigin"; "required": false; }; "positions": { "alias": "cdkConnectedOverlayPositions"; "required": false; }; "positionStrategy": { "alias": "cdkConnectedOverlayPositionStrategy"; "required": false; }; "offsetX": { "alias": "cdkConnectedOverlayOffsetX"; "required": false; }; "offsetY": { "alias": "cdkConnectedOverlayOffsetY"; "required": false; }; "width": { "alias": "cdkConnectedOverlayWidth"; "required": false; }; "height": { "alias": "cdkConnectedOverlayHeight"; "required": false; }; "minWidth": { "alias": "cdkConnectedOverlayMinWidth"; "required": false; }; "minHeight": { "alias": "cdkConnectedOverlayMinHeight"; "required": false; }; "backdropClass": { "alias": "cdkConnectedOverlayBackdropClass"; "required": false; }; "panelClass": { "alias": "cdkConnectedOverlayPanelClass"; "required": false; }; "viewportMargin": { "alias": "cdkConnectedOverlayViewportMargin"; "required": false; }; "scrollStrategy": { "alias": "cdkConnectedOverlayScrollStrategy"; "required": false; }; "open": { "alias": "cdkConnectedOverlayOpen"; "required": false; }; "disableClose": { "alias": "cdkConnectedOverlayDisableClose"; "required": false; }; "transformOriginSelector": { "alias": "cdkConnectedOverlayTransformOriginOn"; "required": false; }; "hasBackdrop": { "alias": "cdkConnectedOverlayHasBackdrop"; "required": false; }; "lockPosition": { "alias": "cdkConnectedOverlayLockPosition"; "required": false; }; "flexibleDimensions": { "alias": "cdkConnectedOverlayFlexibleDimensions"; "required": false; }; "growAfterOpen": { "alias": "cdkConnectedOverlayGrowAfterOpen"; "required": false; }; "push": { "alias": "cdkConnectedOverlayPush"; "required": false; }; "disposeOnNavigation": { "alias": "cdkConnectedOverlayDisposeOnNavigation"; "required": false; }; }, { "backdropClick": "backdropClick"; "positionChange": "positionChange"; "attach": "attach"; "detach": "detach"; "overlayKeydown": "overlayKeydown"; "overlayOutsideClick": "overlayOutsideClick"; }, never, never, true, never>;
9296
// (undocumented)
9397
static ɵfac: i0.ɵɵFactoryDeclaration<CdkConnectedOverlay, [null, null, null, null, { optional: true; }]>;
9498
}

0 commit comments

Comments
 (0)