Javascript 历史推送状态重定向,而不只是将新状态推送到浏览器历史

Javascript 历史推送状态重定向,而不只是将新状态推送到浏览器历史,javascript,angular,html,angular-routing,browser-history,Javascript,Angular,Html,Angular Routing,Browser History,我试图在应用程序初始化时将新状态推送到浏览器历史记录,但在推送状态的同时,它也会重定向不需要的页面 这里是一个演示工作应用程序。 代码如下: ngAfterViewInit() { console.log('init called'); var x = document.referrer; console.log('ref', x); if (x) { console.log('pushing state'); this.locatio

我试图在应用程序初始化时将新状态推送到浏览器历史记录,但在推送状态的同时,它也会重定向不需要的页面

这里是一个演示工作应用程序。

代码如下:

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');
    }
}
预期行为:

  • 点击链接将用户带到第2页
  • 初始化page2时,应将状态“/page3”推送到浏览器历史记录中
  • 当用户现在单击浏览器返回时,它应该转到/page3,因为它在上面的步骤2中被推到了历史
  • 当前行为:

  • 点击链接,进入第2页,但在按下状态时,它会自动重定向到/page3
  • 单击browser back(浏览器返回)时,会返回到/page2
  • 预期行为: 1.点击链接将用户带到第2页。 2.初始化page2时,应将状态“/page3”推送到浏览器历史记录中。 3.当用户现在单击浏览器返回时,它应该转到/page3,因为它在上面的步骤2中被推到了历史

    因为你所做的,你的历史状态是:p1->p2->p3。这就是你的描述!您希望它是这样的:

  • 单击链接第一次推送状态p3
  • 然后将用户带到p2,初始化时不推送状态
  • 浏览器后退现在按预期工作

  • 编辑:

    这就是如何实现它的方法。在
    page2.component.ts中

    ngOnInit() {
      history.replaceState({ data: 'at page 3' }, 'Page3', '/page3');
      history.pushState({ data: 'at page 2' }, 'Page2', '/page2');
    }
    
    但是,请再次阅读

    我们在这里要做的是将url更改为您希望返回的url,并使用
    history.replaceState({id:'page3'},'page3','/page3')
    然后使用
    history.pushState(null,null,locat)在历史记录中创建一个新条目包含第一个url

    我已经在两篇不同的帖子中回答了你这个问题,只是略有不同:

    实时示例分叉:
    是的,你说得对。我想在用户登陆到第2页之前推送一个状态“/page3”,这样当用户点击返回时,他会被带到第3页。@Varunukheja啊,所以你知道我建议的正确步骤,但你不知道如何实现它们,对吗?@Varunukheja首先仔细阅读这个,给出你尝试过的反馈。检查这里的代码。当我的应用程序正在初始化时,我只是在推一个url,但它会重定向到第3页。要查看运行中的代码,请单击“是”,您已回答,但您正在检查状态是否为空,然后通过路由器服务重定向。但是,这看起来是一个解决办法,不是一个合适的解决方案,因为当我们使用历史记录推动状态时,浏览器本身应该负责导航。PushState我也很高兴您以前的解决方案确实有效,因此我投票支持它,但此问题陈述只是更大问题陈述的一小部分,因此我正在寻找浏览器历史记录小心导航,你看到解决方案了吗?它涵盖了这个问题。我不知道现在到底是什么问题。你能解释得更深入一点吗?因为有了这些代码,它应该可以工作。在另一篇文章中,你没有在其他两篇文章中投票或将其标记为正确答案。
    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);
        }
    }