我正在尝试在APP初始化时将新状态推送到浏览器历史记录,但是在推送状态时,它还会重定向不需要的页面。
这是一个演示工作应用程序。 https://angular-tet5fy.stackblitz.io/page2?fbclid=IwAR1zP_UTnCQxKMp8o3ZXf-n4NR3ftu_4JoulLqItaONa-_wSPJ_DT95OgRU
这是代码:
ngAfterViewInit() {
console.log('init called');
var x = document.referrer;
console.log('ref', x);
if (x) {
console.log('pushing state');
this.location.pushState({id:'page3'}, 'Page3', '/page3');
}
}
预期行为:
当前行为:
答案 0 :(得分:1)
预期的行为: 1.单击链接将用户带到第2页。 2.初始化page2时,应将状态'/ page3'推入浏览器历史记录。 3.当用户现在单击浏览器时,它应该进入/ page3,因为它已在上面的步骤2中被推到历史记录中。
由于您所做的,您的历史记录状态变为:p1-> p2-> p3。这就是您的描述!您想要这样:
编辑:
这是实现它的方法。在page2.component.ts
中。
ngOnInit() {
history.replaceState({ data: 'at page 3' }, 'Page3', '/page3');
history.pushState({ data: 'at page 2' }, 'Page2', '/page2');
}
但是再次阅读doc。
答案 1 :(得分:1)
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);
}
}
我们在这里所做的操作是使用history.replaceState({id:'page3'},'Page3','/page3');
将URL更改为要成为后退的URL ,然后使用history.pushState(null, null,locat);
在历史记录中重新输入第一个网址。
我已经在两个不同的帖子中回答了这个问题,只是稍有不同:
Angular platformLocation pushState not working