angular / angular/components

bug(CDK Dialog): aria-hidden is not removed when a child dialog is opened before but closed after a parent dialog.

Đang mở
#30,028 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
area: cdk/dialog P3
Ngôn ngữ chính
TypeScript
Star
25k
Fork
6.8k
Merge trung bình
1 ngày 8 giờ
Pull request đã merge (30 ngày)
91

Mô tả

### Is this a regression?

- [ ] Yes, this behavior used to work in the previous version

### The previous version in which this bug was not present was

_No response_

### Description

When an application uses routing, the application has its CDK `Dialog` instance (A), and the route's component has its own CDK `Dialog` instance (B), which has A as its parent.

When B opens a component in an overlay, it sets the **aria-hidden** attributes.

When the application provides a set of shared dialog components and a service to open them, they are opened from A, and **aria-hidden** attributes are not set because they are already present. (see [Dialog._hideNonDialogContentFromAssistiveTechnology](https://github.com/angular/components/blob/ef9cff380771da821fbf018b0e58ed4c0600b355/src/cdk/dialog/dialog.ts#L375C11-L375C55)).

When B removes the last dialog (see [Dialog._removeOpenDialog](https://github.com/angular/components/blob/ef9cff380771da821fbf018b0e58ed4c0600b355/src/cdk/dialog/dialog.ts#L348)) while its parent (A) has dialogs open, the aria-hidden attributes are not removed.

This means that because the parent CDK dialog (A) doesn't know that the child dialog had any attributes set, the **aria-hidden** attributes are never removed again, and the application becomes inaccessible to assistive technologies.

### Reproduction

StackBlitz link: https://stackblitz.com/edit/components-issue-starter-aa1qpb
Steps to reproduce:
1. Click on Load Child
2. Click on Show Dialog
3. In the dialog click 'save and close'
4. observe the 'wait dialog' being opened (before the Dialog is closed)
5. the dialog is closed
6. after the wait dialog is closed check the

### Expected Behavior

All **aria-hidden** attributes **set** by dialogs are removed again.

### Actual Behavior

The aria-hidden attributes set by CDK `Dialog` B remain.

### Environment

- Angular: 18.2.8
- CDK/Material: 18.2.8
- Browser(s): Any
- Operating System (e.g. Windows, macOS, Ubuntu): Any

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Bắt đầu trong src/cdk/dialog/dialog.ts tại _hideNonDialogContentFromAssistiveTechnology và _removeOpenDialog, theo dõi luồng Dialog cha và con được mô tả trong phần tái hiện. Tái hiện kịch bản routing từ StackBlitz được liên kết, sau đó xác minh rằng các thuộc tính aria-hidden do Dialog con thiết lập được xóa sau khi cả hai Dialog đóng.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
angular, typescript
Lĩnh vực
accessibility, frontend
Loại issue
Lỗi
Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Đặc tả rõ ràng
Mức phù hợp với người mới
55/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.