我正在创建一个安全的网站(使用AngularJS 1.3),如果用户单击浏览器返回按钮,我想将其重定向到"登录"状态。我使用ui路由器进行状态更改,并将stateChangeSuccess事件和previousState属性用于其他用例。因此,如果清除ui路由器的先前状态信息,则清除窗口历史记录可能不是一个选项。
感谢
我遇到了同样的问题,我做了一个类似的解决方法:
您可以使用ui路由器可选参数:
https://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$stateProvider
一个例子:
$stateProvider.state('yourState', {
url: "/url",
templateUrl: 'yourTemplate',
params: {
click: {value: "false"}
}
}
)
在ui sref(我的按钮)中,我使用:
ui-sref="yourState({click: 'true'})"
之后,您可以使用$stateChangeStart来防止返回或做任何您想做的事情:
$rootScope.$on('$stateChangeStart', function (event, toState, toParams) {
if (toState.name === 'yourState') {
if (toParams.click == 'false') {
// DO YOUR THING
}
};
});
我知道这不是一个通用的解决方案,但我认为你可以调整它来处理你的所有应用程序(可能是州名称的正则表达式)