如何在不影响ui-router状态机的情况下单击浏览器移动到特定状态

时间:2015-04-15 07:21:44

标签: angularjs angular-ui-router back

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

由于

1 个答案:

答案 0 :(得分:1)

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

您可以使用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
        }
    };
});

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