angular - Angular7 e NgbModal: como remover o foco automático padrão
Acabamos de atualizar nossa aplicação para Angular 7 e notamos que todos os modais do ngBootstrap agora têm um foco automático padrão no botão de fechar, como na imagem a seguir.
aqui está meu código:
código modal html:
<form [formGroup]="storeForm" novalidate>
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Modal Test</h4>
<button type="button" class="close" aria-label="Close"
(click)="activeModal.dismiss('Cross click')">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<h4>Todo</h4>
</div>
<div class="modal-footer">
<button role="button" type="submit" class="btn btn-primary"
(click)="activeModal.close('Finish click')" prevent-double-
submit>{{ 'store.add.finish' | translate }}</button>
</div>
</div>
</form>
e como o modal é chamado graças ao meu component.ts
const modal = this._modalService.open(ModalComponent, { backdrop:
'static', size: 'lg'});
modal.result.then(
(data) => {
// some code
},
() => {
}
);
Minha pergunta é como posso remover esse foco automático padrão que não se encaixa com o comportamento que esperamos?
Obrigado pela leitura e por favor, desculpe os erros de ortografia.
Resposta #1
O foco precisa estar dentro do modal por razões de acessibilidade e navegação por teclado. Por padrão, o foco está no primeiro elemento focável dentro do modal, que no seu caso é o botão de fechar. Você pode adicionar o atributo ngbAutofocus ao elemento onde deseja que o foco esteja.
Demonstração de gerenciamento de foco.
<button type="button" ngbAutofocus class="btn btn-danger"
(click)="modal.close('Ok click')">Ok</button>
Você pode ler mais no github
Resposta #2
Se você não se importa que o botão de fechar esteja realmente em foco, mas quer se livrar do contorno feio, você pode usar outline: none.
template.html:
<button type="button" aria-label="Close">Close</button>
styles.css:
button[aria-label="Close"]:focus {
outline: none;
}
Resposta #3
É um truque feio, mas você pode adicionar um elemento não visível como o primeiro elemento:
<input type="text" style="display:none" />
