イベント発生時に他のコンポーネントが購読できるサービスを作成します。例:
@Injectable()
public class KeyEventService {
private keydown$: Observable;
constructor() {
this.keydown$ = Observable.fromEvent(window, "keydown");
}
public getEscapeKeyListener() {
return this.keydown$.filter((event: KeyboardEvent) => event.keyCode === 27);
}
}
これにより、イベントのリスナーを一度設定してから、適切なキー入力にフィルタリングすることができます。パブリックメソッドは、特定のキーまたは複数のキーをフィルタリングするobservablesを返します。新しいobservableを設定する必要はありません。次に、あなたのコンポーネントには、あなたがこのようにそれを使用します。これは、あなたがしたいイベントが発生したときにあなただけの適切な行動を取ることができ、あなたのコンポーネントに一度だけして、リスナーを設定することができます
@Component({})
public class MyComponent implements OnInit, OnDestroy {
private keyListenerSub: Subscription;
constructor(private keyEventSvc: KeyEventService) { }
ngOnInit() {
this.keyListenerSub = this.keyEventSvc.getEscapeKeyListener().subscribe(() => {
/* respond to keypress */
});
}
ngOnDestroy() {
this.keyListenerSub.unsubscribe();
}
}
。
Thnxは、非常に固いソリューションのように聞こえる –