В моем приложении Angular2 используется ng-bootstrap modal, чтобы подробно показать некоторые диаграммы результатов. По этой причине я изменил модальный почти на весь экран (только margin: 20px
влево). Это заставляет некоторых пользователей использовать кнопку возврата браузера, а не кнопку закрытия в верхнем правом или нижнем углу страницы.
Теперь я пытаюсь отменить событие обратной связи браузера по умолчанию и закрыть модальное выражение, когда вызывается событие.
Я использую код здесь в качестве базы кода, чтобы прослушивать событие браузера и расширил его некоторыми вещами:
import { PlatformLocation } from '@angular/common'
(...)
modalRef: NgbModalRef;
constructor(location: PlatformLocation) {
location.onPopState(() => {
console.log('pressed back!');
// example for a simple check if modal is opened
if(this.modalRef !== undefined)
{
console.log('modal is opened - cancel default browser event and close modal');
// TODO: cancel the default event
// close modal
this.modalRef.close();
}
else
{
console.log('modal is not opened - default browser event');
}
});
}
(...)
// some code to open the modal and store the reference to this.modalRef
Проблема в том, что я не знаю, как и могу ли я отменить предыдущее событие по умолчанию.
location.onPopState((event) => {
event.preventDefault();
});
Это фактически не работает. То же самое для этого решения. Может быть, я могу вставить некоторый "поддельный" стек истории, когда открываем модальный?!
Для AngularJS 1.x кажется, что он работает: qaru.site/info/630868/...