历史推送状态重定向,而不是仅仅将新状态推送到浏览器历史记录

问题描述 投票:2回答:2

我试图在我的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');
    }
}

预期行为:

  1. 单击该链接会将用户带到page2。
  2. 初始化page2时,它应将状态'/ page3'推送到浏览器历史记录。
  3. 当用户现在点击浏览器时,它应该转到/ page3,因为它在上面的步骤2中被推送到历史记录。

目前的行为:

  1. 点击链接,转到第2页,但在按下状态时会自动重定向到/ page3。
  2. 单击浏览器后,它会将我带回/ page2。
javascript angular html5 angular-routing browser-history
2个回答
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然后用history.pushState(null, null,locat);在他的第一个网址上创建一个新的历史记录。

我已经在两个不同的帖子中回答了你这个问题,只有一点变化:

Angular platformLocation pushState not working

Angular: take user to home on clicking browser back button

实例示例叉:https://angular-stack-55624908.stackblitz.io/page2


1
投票

预期的行为:1。单击该链接将用户带到page2。 2.初始化page2时,它应将状态'/ page3'推送到浏览器历史记录。 3.当用户现在点击浏览器时,它应该转到/ page3,因为它在上面的步骤2中被推送到历史记录。

因为你所做的,你的历史状态是:p1 - > p2 - > p3。这是你的描述!你想要这样:

  1. 点击链接首先按状态p3
  2. 然后将用户带到p2,并在初始化时不要按状态
  3. 浏览器现在按预期工作

编辑:

这是你如何实现它。在page2.component.ts

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

但同样,请阅读doc

© www.soinside.com 2019 - 2024. All rights reserved.