Skip to content

Commit 985721c

Browse files
authoredMar 21, 2025··
fix(cdk/menu): not clearing aria-controls on context menu (#30680)
Fixes that we were keeping the current menu ID on the context menu trigger instead of clearing it. Fixes #30666.
1 parent 0e5b409 commit 985721c

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed
 

‎src/cdk/menu/context-menu-trigger.spec.ts

+19-3
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,14 @@ describe('CdkContextMenuTrigger', () => {
3737
}
3838

3939
/** Get the context in which the context menu should trigger. */
40-
function getMenuContext() {
40+
function getMenuTrigger() {
4141
return fixture.componentInstance.triggerElement.nativeElement;
4242
}
4343

4444
/** Open up the context menu and run change detection. */
4545
function openContextMenu() {
4646
// right click triggers a context menu event
47-
dispatchMouseEvent(getMenuContext(), 'contextmenu');
47+
dispatchMouseEvent(getMenuTrigger(), 'contextmenu');
4848
fixture.detectChanges();
4949
}
5050

@@ -57,7 +57,7 @@ describe('CdkContextMenuTrigger', () => {
5757
it('should close out the context menu when clicking in the context', () => {
5858
openContextMenu();
5959

60-
getMenuContext().click();
60+
getMenuTrigger().click();
6161
fixture.detectChanges();
6262

6363
expect(getContextMenu()).not.toBeDefined();
@@ -143,6 +143,22 @@ describe('CdkContextMenuTrigger', () => {
143143
fixture.detectChanges();
144144
expect(getContextMenu()).toBeDefined();
145145
});
146+
147+
it('should toggle aria-controls depending on if the menu is open', () => {
148+
const trigger = getMenuTrigger();
149+
150+
expect(trigger.hasAttribute('aria-controls')).toBe(false);
151+
expect(getContextMenu()).not.toBeDefined();
152+
153+
openContextMenu();
154+
expect(trigger.getAttribute('aria-controls')).toBeTruthy();
155+
expect(getContextMenu()).toBeDefined();
156+
157+
trigger.click();
158+
fixture.detectChanges();
159+
expect(trigger.hasAttribute('aria-controls')).toBe(false);
160+
expect(getContextMenu()).not.toBeDefined();
161+
});
146162
});
147163

148164
describe('nested context menu triggers', () => {

‎src/cdk/menu/context-menu-trigger.ts

+2
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,8 @@ export class CdkContextMenuTrigger extends CdkMenuTriggerBase implements OnDestr
175175
if (item === this.childMenu && this.isOpen()) {
176176
this.closed.next();
177177
this.overlayRef!.detach();
178+
this.childMenu = undefined;
179+
this._changeDetectorRef.markForCheck();
178180
}
179181
});
180182
}

0 commit comments

Comments
 (0)
Please sign in to comment.