@ali-tnkh

Почему Angular CDK при возвращении назад через браузер убирает query параметры?

Есть поиск, который открывается в модальном окне, модельные окна создаются через 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
  • Вопрос задан
  • 87 просмотров
Пригласить эксперта
Ответы на вопрос 1
@kttotto
пофиг на чем писать
Вы лучше показали бы код роутинга и как вызывается метод open, точнее, как обрабатываются параметры url.

Возможно это связано с настройкой роутера, например, нет настройки для страницы с параметром, он переходит на основную, дальше внутри компонента видимо есть subscribe на route и уже там обрабатываются параметры url, происходит navigate, открытие модалки. Предполагаю, что нужно просто добавить роут с параметром, а остальную логику возможно менять не придется.

Но так же возможно где-то есть этот лишний navigate. В общем нужно другой код смотреть, нет смысла смотреть как открывается модалка, нужно смотреть как обрабатываются переходы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы