Я пытаюсь добавить новое состояние в историю браузера при инициализации моего приложения, но, нажимая состояние, оно также перенаправляет страницу, которая не требуется.
History push state перенаправляет вместо того, чтобы просто помещать новое состояние в историю браузера
Ответы (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
Ожидаемое поведение: 1. При нажатии на ссылку пользователь переходит на страницу 2. 2. Пока страница 2 инициализирована, она должна передать состояние «/ страница 3» в историю браузера. 3. Когда пользователь щелкает в браузере назад, он должен перейти на страницу / page3, как это было помещено в историю на шаге 2 выше.
Поскольку то, что вы сделали, ваше состояние истории выглядит следующим образом: p1 -> p2 -> p3. Это в вашем описании! Вы хотите, чтобы это было так:
- При нажатии на ссылку сначала нажмите состояние p3
- Затем переведите пользователя на p2 и не нажимайте состояние при инициализации
- Браузер вернулся теперь работает должным образом
Редактировать:
Вот как это можно реализовать. В 1_.
ngOnInit() {
history.replaceState({ data: 'at page 3' }, 'Page3', '/page3');
history.pushState({ data: 'at page 2' }, 'Page2', '/page2');
}
Но снова прочтите doc.