AngularDart 检测组件内的 Keyup 事件

AngularDart Detect Keyup Event within Component

我正在尝试在 material 对话框模式中检测 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 索引问题。因此,您不会从主机中的对话框中获取事件。相反,您可以直接将事件添加到 material-dialog:

模板:

<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'