Я пытаюсь обнаружить нажатия клавиш esc / enter в модальном диалоговом окне материала. Вот минимальная настройка:
Шаблон:
<modal [visible] = "true">
<material-dialog info headered class = "dialog">
TEST
</material-dialog>
</modal>
Составная часть:
import 'dart:html';
import 'package:angular/angular.dart';
import 'package:angular_components/angular_components.dart';
@Component(
selector: 'confirm-purchase-dialog',
styleUrls: ['confirm_purchase_dialog.css'],
templateUrl: 'confirm_purchase_dialog.html',
directives: const [
MaterialDialogComponent,
ModalComponent,
],
providers: const [overlayBindings]
)
class ConfirmPurchaseDialogComponent {
@HostListener('keyup', ['\$event'])
void onKeyUp(KeyboardEvent e) {
print("KEYUP");
}
}
Я также пробовал @HostListener ('keyup'), но не повезло. Полностью застрял, был бы очень признателен за предложения.





Всплывающие окна (включая диалоги) перенаправляются в другое место в DOM для решения проблем z-индексации. Таким образом, вы не будете получать события из диалога на хосте. Вместо этого вы можете добавлять события непосредственно в диалог материалов:
Шаблон:
<modal [visible] = "true">
<material-dialog info headered class = "dialog" (keyup) = "onKeyUp">
TEST
</material-dialog>
</modal>
Составная часть:
import 'dart:html';
import 'package:angular/angular.dart';
import 'package:angular_components/angular_components.dart';
@Component(
selector: 'confirm-purchase-dialog',
styleUrls: ['confirm_purchase_dialog.css'],
templateUrl: 'confirm_purchase_dialog.html',
directives: const [
MaterialDialogComponent,
ModalComponent,
],
providers: const [overlayBindings]
)
class ConfirmPurchaseDialogComponent {
void onKeyUp(KeyboardEvent e) {
print("KEYUP");
}
}
Примечание: это будет только захватывать события клавиатуры, когда фокус находится в самом диалоге. Вместо этого вы можете добавить событие в тело, чтобы перехватить все экземпляры keyup. Это вам нужно будет сделать с помощью обычного 'dart: html'