如何在不影响 ui-router 状态机的情况下通过单击浏览器返回特定状态

How to move to a particular state on click of browser back without affecting ui-router state machine

我正在创建一个安全网站(使用 AngularJS 1.3),如果用户单击浏览器后退按钮,我想将用户重定向到 'Login' 状态。我正在使用 ui-router 进行状态更改,我将 stateChangeSuccess 事件和 previousState 属性 用于其他用例。因此,清除 window 历史记录可能不是一个选项,如果它也清除 ui-路由器的 previousState 信息。

谢谢

我遇到了同样的问题,我做了这样的解决方法:

你可以使用ui-router可选参数:

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
        }
    };
});

我知道这不是一个通用的解决方案,但我认为您可以调整它以适用于您的所有应用程序(可能是州名称的正则表达式)