Skip to content

Commit a6f0bd8

Browse files
committed
fix(material/menu): switch internal state to signals (#31934)
Switches the `_isAnimating` state to a signal in order to avoid "changed after checked" errors. Fixes #31933. (cherry picked from commit 813f66b)
1 parent 94716a8 commit a6f0bd8

File tree

3 files changed

+6
-5
lines changed

3 files changed

+6
-5
lines changed

goldens/material/menu/index.api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ export class MatMenu implements AfterContentInit, MatMenuPanel<MatMenuItem>, OnI
110110
_handleKeydown(event: KeyboardEvent): void;
111111
hasBackdrop?: boolean;
112112
_hovered(): Observable<MatMenuItem>;
113-
_isAnimating: boolean;
113+
_isAnimating: i0.WritableSignal<boolean>;
114114
// @deprecated
115115
items: QueryList<MatMenuItem>;
116116
lazyContent: MatMenuContent;

src/material/menu/menu.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
[class]="_classList"
66
[class.mat-menu-panel-animations-disabled]="_animationsDisabled"
77
[class.mat-menu-panel-exit-animation]="_panelAnimationState === 'void'"
8-
[class.mat-menu-panel-animating]="_isAnimating"
8+
[class.mat-menu-panel-animating]="_isAnimating()"
99
(click)="closed.emit('click')"
1010
tabindex="-1"
1111
role="menu"

src/material/menu/menu.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import {
2929
AfterRenderRef,
3030
inject,
3131
Injector,
32+
signal,
3233
} from '@angular/core';
3334
import {_IdGenerator, FocusKeyManager, FocusOrigin} from '@angular/cdk/a11y';
3435
import {Direction} from '@angular/cdk/bidi';
@@ -146,7 +147,7 @@ export class MatMenu implements AfterContentInit, MatMenuPanel<MatMenuItem>, OnI
146147
readonly _animationDone = new Subject<'void' | 'enter'>();
147148

148149
/** Whether the menu is animating. */
149-
_isAnimating = false;
150+
_isAnimating = signal(false);
150151

151152
/** Parent menu of the current menu panel. */
152153
parentMenu: MatMenuPanel | undefined;
@@ -470,13 +471,13 @@ export class MatMenu implements AfterContentInit, MatMenuPanel<MatMenuItem>, OnI
470471
this._exitFallbackTimeout = undefined;
471472
}
472473
this._animationDone.next(isExit ? 'void' : 'enter');
473-
this._isAnimating = false;
474+
this._isAnimating.set(false);
474475
}
475476
}
476477

477478
protected _onAnimationStart(state: string) {
478479
if (state === ENTER_ANIMATION || state === EXIT_ANIMATION) {
479-
this._isAnimating = true;
480+
this._isAnimating.set(true);
480481
}
481482
}
482483

0 commit comments

Comments
 (0)