Угловой материал 7: Невозможно правильно выбрать переключатели внутри компонента, используя клавиатуру
Я разрабатываю приложение с Ionic 4/Angular 7/Angular Material 7.
На экране есть степпер.
Внутри каждого степпера есть сложные формы. Учитывая его сложность, я поместил эту форму внутри компонентов.
Во втором шаге есть радиогруппа. Когда я открываю второй шаг, я могу установить фокус на радио с помощью клавиатуры, но не могу выбрать радио-кнопку. Переключатель имеет серый круг, но не цвет выделения.
На первом этапе также есть радиогруппа, и в исходном состоянии я могу выбрать ее с помощью клавиатуры. Но если я открою второй шаг и снова открою первый шаг, переключатели также не будут доступны для выбора.
Я смоделировал ситуацию без компонентов внутри степперов и не смог воспроизвести проблему таким образом. Затем я делаю вывод, что проблема вызвана компонентом внутри шага после открытия этого шага.
Как я могу правильно выбрать переключатели внутри шага?
1 ответ
Паллиативно решается с помощью директивы:
import { Directive, HostListener } from '@angular/core';
import { MatRadioButton } from '@angular/material';
@Directive({
selector: 'mat-radio-button'
})
export class MatRadioCorrectionDirective {
constructor(private host:MatRadioButton) { }
@HostListener('keyup', ['$event'])
onKeyup(event: KeyboardEvent) {
// console.log(event);
if(
event.keyCode == 38 // arrow up
|| event.keyCode == 40 // arrow down
|| event.keyCode == 37 // arrow left
|| event.keyCode == 39 // arrow right
) {
event.preventDefault();
this.host.checked = true;
// TODO: send event
this.host.change.emit(null);
// setTimeout(() => {
// }, 500);
}
}
}