4

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

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

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

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

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

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

4

1 回答 1

2

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

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

这是一个演示 Plunk

于 2014-01-28T20:59:16.060 回答