Есть поиск, который открывается в модальном окне, модельные окна создаются через cdk overlay. Кнопка открытия модального окна поиска находится в хэдере, поиск может быть открыт на любой странице. Также поиск открывается, если в ссылке есть параметры (например ite.com/mypage?search=my_request). Т.е в окне поиска есть инпут, где я ввожу запрос (например "мой запрос"), нажимаю "Найти", ссылка меняется на "site.com/mypage?search=мой_запрос", т.к есть параметр search, то модальное окно открыто, и по параметру происходит поиск. Результаты отображаются в этом же модальном окне. Если я кликаю на результат, чтоб перейти на его страницу, то сначала идет переход на текущую страницу без параметров поиска (site.com/mypage), а потом на ту, которую я выбираю в результатах поиска. Это создает проблемы, когда я хочу вернуться назад.к поиску, потому что приходится дважды кликать "назад" в браузере. Если в ссылке есть другие параметры, не связанные с модальным окном, то они возвращаются при переходе назад, все нормально.
Когда я руками в браузере меняю ссылку с "site.com/mypage?search=мой_запрос" на любую другую, перехожу по ней, а потом возвращаюсь назад, то все нормально, я попадаю на страницу "site.com/mypage?search=мой_запрос".
Я пыталась использовать this.router.navigate вместо routerLink для перехода по ссылке из результатов поиска, но это все равно одинаково работает.
Я новичок в ангуляре, поэтому мне поможет любая информация, которая объясняет такое поведение, ну и хотелось бы узнать, что делать в таком случае.
Код открывающий модальные окна, если он может быть полезен:
public open(code: ModalCode, component, data?: any): void {
const currentModals = this.event.getValue();
const existModalIndex = currentModals.findIndex(x => x.code === code);
const overlayRef = this.overlay.create({ height: '100%', width: '100%' });
const portal = new ComponentPortal(component);
const popupElementRef = overlayRef.attach(portal);
const newModal: ModalItem = {code, overlayRef, data};
const componentInstance: any & { modalItem: ModalItem } = popupElementRef.instance;
componentInstance.modalItem = newModal;
if (existModalIndex >= 0) {
this.close(code, true);
currentModals[existModalIndex] = newModal;
this.event.next(currentModals);
} else {
this.event.next([...this.event.getValue(), newModal]);
}
}
cdk версия 8.2.3, angular версия 10.2