History push state перенаправляет вместо того, чтобы просто помещать новое состояние в историю браузера

Я пытаюсь добавить новое состояние в историю браузера при инициализации моего приложения, но, нажимая состояние, оно также перенаправляет страницу, которая не требуется.

Вот демонстрационное рабочее приложение.

person Varun Sukheja    schedule 11.04.2019    source источник


Ответы (2)


ngAfterViewInit() {
    console.log('init called');
    var x = document.referrer;
    console.log('ref', x);

    if (x) {
      console.log('pushing state');
      let locat = location.href;
      history.replaceState({id:'page3'},'Page3','/page3');
      history.pushState(null,null,locat);
    }
}

Что мы здесь делаем, это меняем URL-адрес на URL-адрес , который вы хотите вернуть с помощью history.replaceState({id:'page3'},'Page3','/page3');, а затем делаем новую запись в истории с помощью history.pushState(null, null,locat); без первого URL-адреса.

Я ответил вам на этот вопрос уже в двух разных сообщениях с небольшими вариациями:

Angular platformLocation pushState не работает

Angular: вернуть пользователя домой, нажав кнопку возврата браузера назад < / а>

Живой пример вилки: https://angular-stack-55624908.stackblitz.io/page2

person Daniel Piñeiro    schedule 11.04.2019
comment
Да, вы ответили, но вы проверяли, является ли состояние нулевым, а затем перенаправляйте через службу маршрутизатора. Но это выглядит обходным путем, а не правильным решением, поскольку браузер сам должен позаботиться о навигации, когда мы нажимаем состояние с помощью history.pushState - person Varun Sukheja; 11.04.2019
comment
Также я рад, что ваше предыдущее решение сработало, и поэтому я проголосовал за него, но эта постановка проблемы является небольшой частью более серьезной постановки проблемы, поэтому я ищу историю браузера, чтобы позаботиться о навигации. - person Varun Sukheja; 11.04.2019
comment
Вы видели решение? Это покрывает проблему. Я не понимаю, в чем именно проблема сейчас. Можете ли вы объяснить это немного глубже? потому что с этим кодом он должен работать. В другой заметке вы не проголосовали за него и не отметили его как правильный ответ ни в одном из двух других постов. - person Daniel Piñeiro; 11.04.2019

Ожидаемое поведение: 1. При нажатии на ссылку пользователь переходит на страницу 2. 2. Пока страница 2 инициализирована, она должна передать состояние «/ страница 3» в историю браузера. 3. Когда пользователь щелкает в браузере назад, он должен перейти на страницу / page3, как это было помещено в историю на шаге 2 выше.

Поскольку то, что вы сделали, ваше состояние истории выглядит следующим образом: p1 -> p2 -> p3. Это в вашем описании! Вы хотите, чтобы это было так:

  1. При нажатии на ссылку сначала нажмите состояние p3
  2. Затем переведите пользователя на p2 и не нажимайте состояние при инициализации
  3. Браузер вернулся теперь работает должным образом

Редактировать:

Вот как это можно реализовать. В 1_.

ngOnInit() {
  history.replaceState({ data: 'at page 3' }, 'Page3', '/page3');
  history.pushState({ data: 'at page 2' }, 'Page2', '/page2');
}

Но снова прочтите doc.

person hackape    schedule 11.04.2019
comment
Да, вы меня правильно поняли. Я хочу подтолкнуть состояние '/ page3' до того, как пользователь перейдет на страницу 2, поэтому, когда пользователь щелкает обратно, он попадает на страницу 3. - person Varun Sukheja; 11.04.2019
comment
@VarunSukheja А, значит, вы знаете правильные шаги, как я предложил, но вы не знаете, как их реализовать, верно? - person hackape; 11.04.2019
comment
@VarunSukheja сначала внимательно прочтите этот документ, поделитесь своим мнением о том, что вы пробовали. - person hackape; 11.04.2019
comment
проверьте код здесь stackblitz.com/edit/angular- wb9fnf? file = src / app /. Я просто нажимаю URL-адрес, пока мое приложение инициализируется, но оно перенаправляется на page3. Чтобы увидеть код в действии, нажмите angular-wb9fnf.stackblitz.io/page2. - person Varun Sukheja; 11.04.2019