Этого легче добиться с помощью реактивного подхода:
@Directive({
selector: '[appClickf5]',
})
export class Clickf5Directive implements OnInit, OnDestroy {
private destroyed$: Subject<void> = new Subject();
constructor(private _el: ElementRef) {}
public ngOnInit() {
fromEvent(document, 'keydown').pipe(
filter(
(e: KeyboardEvent) =>
(e.code === 'F5' || e.key === 'F5') && e.ctrlKey === false
),
tap((e: KeyboardEvent) => {
e.preventDefault();
this._el.nativeElement.click();
}),
takeUntil(this.destroyed$)
).subscribe();
}
public ngOnDestroy() {
this.destroyed$.next();
this.destroyed$.complete();
}
}
Я сделал живую демонстрацию только с rx js, в течение первых 5 секунд она ловит события и предотвращает повторное обновление sh. Через 5 секунд вы можете обновить sh страницу:
https://stackblitz.com/edit/rxjs-rfylfi?file=index.ts
Чтобы попробовать, вы должны использовать:
![enter image description here](https://i.stack.imgur.com/x9D9i.png)
в противном случае будет перезагружено приложение stackblitz, а не само приложение