[解決済み] ページ全体のキー押下イベントをリスニングするには?
2022-05-27 19:53:43
質問
私はページ全体に関数をバインドする方法を探しています(ユーザーがキーを押したとき、私はそれが私のcomponent.tsで関数をトリガしたい)。
AngularJSでは簡単に
ng-keypress
では簡単でしたが
(keypress)="handleInput($event)"
.
ページ全体のdivラッパーで試してみましたが、うまくいかないようです。 フォーカスが当たっているときだけ動作します。
<div (keypress)="handleInput($event)" tabindex="1">
どのように解決するのですか?
私なら ホストリスナー デコレータを追加します。
import { HostListener } from '@angular/core';
@Component({
...
})
export class AppComponent {
@HostListener('document:keypress', ['$event'])
handleKeyboardEvent(event: KeyboardEvent) {
this.key = event.key;
}
}
などのオプションもあります。
ホストプロパティ
内
@Component
デコレータ
Angularでは
@HostListener
デコレータを使うことを推奨します。
https://angular.io/guide/styleguide#style-06-03
@Component({
...
host: {
'(document:keypress)': 'handleKeyboardEvent($event)'
}
})
export class AppComponent {
handleKeyboardEvent(event: KeyboardEvent) {
console.log(event);
}
}
レンダラ.リスン
import { Component, Renderer2 } from '@angular/core';
@Component({
...
})
export class AppComponent {
globalListenFunc: Function;
constructor(private renderer: Renderer2) {}
ngOnInit() {
this.globalListenFunc = this.renderer.listen('document', 'keypress', e => {
console.log(e);
});
}
ngOnDestroy() {
// remove listener
this.globalListenFunc();
}
}
Observable.fromEvent
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/fromEvent';
import { Subscription } from 'rxjs/Subscription';
@Component({
...
})
export class AppComponent {
subscription: Subscription;
ngOnInit() {
this.subscription = Observable.fromEvent(document, 'keypress').subscribe(e => {
console.log(e);
})
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
}
関連
-
[解決済み】Typescript: スプレッド型はオブジェクト型からしか作成できない
-
[解決済み] Webpack with typescriptでTypeScript emitted no outputエラーが発生する。
-
[解決済み] as "というキーワードは何を意味するのでしょうか?
-
[解決済み] jQueryイベントKeypress。どのキーが押されたか?
-
[解決済み] コンポーネントテンプレートで要素を選択するには?
-
[解決済み] Angularでselect要素をオブジェクトにバインドする
-
[解決済み] Angular 2のキープレスごとの変更イベント
-
[解決済み】TypeScriptで型をnullableとして宣言する方法は?
-
[解決済み】TypeScriptとフィールドイニシャライザー
-
[解決済み】引数として渡されたTypeScriptオブジェクトにデフォルト値を設定する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】tsconfigファイルにおけるesModuleInteropの理解
-
[解決済み] TypeScriptの円形型参照
-
[解決済み] TypeScriptで、「extends keyof」と「in keyof」はどういう意味ですか?
-
[解決済み] オブジェクトの型は「不明」です typescript generics
-
[解決済み] TypeScriptのInterface Function Property。何が違うの?
-
[解決済み] TypeScript で `window` に新しいプロパティを明示的に設定するにはどうすればよいですか?
-
[解決済み] noImplicitAnyフラグを有効にしてtypescriptをコンパイルすると、"Index signature of object type implicitly has an 'any' type "というエラーが発生しますが、どうすれば防ぐことができますか?
-
[解決済み】TypeScriptの "not assignable to parameter of type never "エラーとは?
-
[解決済み】tsconfig.jsonファイルを生成するにはどうしたらいいですか?
-
[解決済み】タイプライター。TS7006: パラメータ 'xxx' は暗黙のうちに 'any' 型を持つ。