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

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

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

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

Похожие вопросы