У меня есть ловушка фокуса, которая активируется при открытии диалогового окна углового материала. Родительский компонент содержит директиву cdkTrapFocus из модуля a11yModule (https://material.angular.io/cdk/a11y/api#CdkTrapFocus), и его различные дочерние элементы могут иметь различное количество входных данных.
Ловушка фокуса работает должным образом, когда диалоговое окно открыто, не позволяя пользователю нажимать вкладку или Shift-Tab для доступа к элементам за диалоговым окном. Однако, когда пользователь щелкает затененную область позади диалогового окна, а затем нажимает Shift-Tab, он получает доступ ко всем элементам позади диалогового окна.
Ловушка фокуса остается сломанной до тех пор, пока они не нажмут Shift-Tab (или Tab) достаточное количество раз, чтобы переместить фокус обратно в диалоговое окно. Правильным поведением было бы то, что фокус всегда остается в диалоговом окне, независимо от того, что щелкнули внутри или за пределами диалогового окна.
По большей части я просмотрел приведенную выше ссылку, чтобы увидеть, какие есть варианты, чтобы фокус оставался в ловушке, но было трудно определить, какие директивы были бы наиболее полезными для этой проблемы. Ниже приведен html-шаблон родительского компонента.
<div class="dialog-frame dialog-fade dialog-backgray" [ngClass]="{ 'in': shown }" role="dialog">
<div class="dialog-main" [style.width]="dialogWidth" id="dialog-main" cdkTrapFocus>
<ng-template #element> </ng-template>
</div>
</div>
Если у кого-то, кто читает это, есть решение этой проблемы, я был бы признателен за вашу помощь.