Skip to content

Commit e421765

Browse files
authored
fix(cdk/menu): not responding to position changes (#30234)
Fixes that the CDK menu wasn't updating its position strategy after the first open. Fixes #30145.
1 parent 0f053ff commit e421765

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

src/cdk/menu/menu-trigger.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@ import {
1212
ElementRef,
1313
inject,
1414
NgZone,
15+
OnChanges,
1516
OnDestroy,
1617
Renderer2,
18+
SimpleChanges,
1719
} from '@angular/core';
1820
import {InputModalityDetector} from '@angular/cdk/a11y';
1921
import {Directionality} from '@angular/cdk/bidi';
@@ -72,7 +74,7 @@ import {eventDispatchesNativeClick} from './event-detection';
7274
PARENT_OR_NEW_MENU_STACK_PROVIDER,
7375
],
7476
})
75-
export class CdkMenuTrigger extends CdkMenuTriggerBase implements OnDestroy {
77+
export class CdkMenuTrigger extends CdkMenuTriggerBase implements OnChanges, OnDestroy {
7678
private readonly _elementRef: ElementRef<HTMLElement> = inject(ElementRef);
7779
private readonly _overlay = inject(Overlay);
7880
private readonly _ngZone = inject(NgZone);
@@ -133,6 +135,12 @@ export class CdkMenuTrigger extends CdkMenuTriggerBase implements OnDestroy {
133135
return this.childMenu;
134136
}
135137

138+
ngOnChanges(changes: SimpleChanges) {
139+
if (changes['menuPosition'] && this.overlayRef) {
140+
this.overlayRef.updatePositionStrategy(this._getOverlayPositionStrategy());
141+
}
142+
}
143+
136144
override ngOnDestroy(): void {
137145
this._cleanupMouseenter();
138146
super.ngOnDestroy();

tools/public_api_guard/cdk/menu.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@ import { InjectionToken } from '@angular/core';
1818
import { Injector } from '@angular/core';
1919
import { NgZone } from '@angular/core';
2020
import { Observable } from 'rxjs';
21+
import { OnChanges } from '@angular/core';
2122
import { OnDestroy } from '@angular/core';
2223
import { Optional } from '@angular/core';
2324
import { OverlayRef } from '@angular/cdk/overlay';
2425
import { QueryList } from '@angular/core';
2526
import { Renderer2 } from '@angular/core';
2627
import { ScrollStrategy } from '@angular/cdk/overlay';
28+
import { SimpleChanges } from '@angular/core';
2729
import { Subject } from 'rxjs';
2830
import { TemplatePortal } from '@angular/cdk/portal';
2931
import { TemplateRef } from '@angular/core';
@@ -202,12 +204,14 @@ export class CdkMenuModule {
202204
}
203205

204206
// @public
205-
export class CdkMenuTrigger extends CdkMenuTriggerBase implements OnDestroy {
207+
export class CdkMenuTrigger extends CdkMenuTriggerBase implements OnChanges, OnDestroy {
206208
constructor();
207209
close(): void;
208210
getMenu(): Menu | undefined;
209211
_handleClick(): void;
210212
// (undocumented)
213+
ngOnChanges(changes: SimpleChanges): void;
214+
// (undocumented)
211215
ngOnDestroy(): void;
212216
open(): void;
213217
_setHasFocus(hasFocus: boolean): void;

0 commit comments

Comments
 (0)