【问题标题】:Preserve previous page when URL is changed manually with $location使用 $location 手动更改 URL 时保留上一页
【发布时间】:2016-02-04 21:58:34
【问题描述】:

我的控制器中有一个函数可以更改浏览器的 URL,但是当用户单击后退按钮时,我需要保留真正的上一页。

例如:

用户在 /home 并导航到 /article1。当用户在页面中滚动时,我会更改 URL,例如 /article2 使用:

$location.path('article2');

但是如果用户在 /article2 中按下返回浏览器按钮,则 url 将更改为 /article1,我真的需要将导航重定向到 /home。

我用过这段代码:

var previousPage = document.referrer; // Get the previous location on page load
history.pushState({}, '', previousPage); // Alter the history adding the previous page

但它不起作用,因为在使用 $location 更改 url 时,历史状态会自动更改。

如何保留导航?

【问题讨论】:

    标签: javascript angularjs browser-history


    【解决方案1】:

    你可以这样用

    window.onpopstate = () => history.replaceState(history.state, 'gotohome', '/')
    

    它会起作用,但是,如果有人知道,我如何在不使用 window.onpopstate 的情况下更改上一页的 url 帮助我

    【讨论】:

      【解决方案2】:

      您还可以将上一页存储在本地以返回。我有一个应用程序,它有一个后退按钮,可让您返回到您导航过的页面。试试这样的:

      sessionStorage.previousPage = "mypage";
      
      function goBack(){
       $location.path(sessionStorage.previousPage);
      };
      

      【讨论】:

      • 是的,这是解决问题的好方法。但问题是如何拦截浏览器的返回按钮?
      • 你不能,我说得轻描淡写,因为有可能有人已经解决了这个问题。所有浏览器处理后退按钮的方式都不同,因此很难做到。这就是为什么我们提出上述解决方案来解决浏览器后退按钮的问题。如果您确实找到了我很想知道的方法,因为我们可以在我们的应用程序中使用它。
      猜你喜欢
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 2017-01-08
      相关资源
      最近更新 更多