【问题标题】:Angularjs - Remove last history entry after $routeChangeErrorAngularjs - 在 $routeChangeError 之后删除最后一个历史条目
【发布时间】:2014-01-28 16:12:23
【问题描述】:

我有一个 route 必须 resolve 一个服务器端资源。该资源要求进行身份验证。所以我显示了一个可以取消的登录表单弹出窗口。取消路由/解析时,rejected$routeChangeError 会正确触发。

问题是,我现在在地址栏中有一个失败的位置/网址和一个不必要的历史条目。

如何在不重新加载的情况下将当前位置 url 替换为最后一个?以及如何在路由更改失败后删除当前的历史记录?

编辑: 我使用 angular-http-auth。 这是我的路线:

/home > /item(必须解析需要身份验证的资源,当未登录时,会弹出一个可取消的登录表单)

当我取消身份验证时,会触发 $routeChangeError 并且我仍在使用 /home 由于/item 从未呈现的页面。现在地址栏显示一个错误的url:/item

【问题讨论】:

    标签: javascript angularjs angular-http-auth


    【解决方案1】:

    您只需将它们送回您的历史记录中的一步。不要担心历史记录在那里,当他们导航到下一件事时它会被覆盖:

    app.run(function($rootScope, $window) {
       $rootScope.$on('$routeChangeError', function () {
          $window.history.back();
       });
    });
    

    And here's a demo Plunk

    【讨论】:

    • 谢谢,但这会重新加载我已经/仍在看到的页面。我使用 angular-http-auth 并在路由上的资源(通过解析)需要身份验证时打开登录弹出窗口。当我取消该登录弹出窗口时,我看到了正确的页面,但位置错误。使用 $location.replace() 我可以在下一次路线更改时摆脱不必要的历史记录。但这不是解决办法。我必须更改 $routeChangeError 上的 $location 而无需重新加载同一页面。
    • 那么您需要提供更多代码。我以为我知道你需要做什么,但现在我不知道你在尝试什么。另外,我建议您使用“angular-http-auth”或您正在使用的任何内容标记您的问题,并可能将链接发送给模块的作者。
    • 很遗憾,我不允许打开新标签“angular-http-auth”。
    • 我想我可以将我的问题简化为:如何在不重新加载该页面的情况下将当前位置 url 恢复到前一个位置。当您已经在那个“上一个”页面上时,页面重新加载没有用。我的路线更改根本失败,我不想重定向到错误页面并替换()或类似的东西。
    • 你是对的。我应该再次使用服务,就像我已经在另一个项目中所做的那样。那条路线/解决问题很有趣,但似乎有限或几乎值得怀疑。遗憾!也许ui-router更灵活。非常感谢!
    猜你喜欢
    • 2015-03-11
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    相关资源
    最近更新 更多