如何在不影响 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
}
};
});
我知道这不是一个通用的解决方案,但我认为您可以调整它以适用于您的所有应用程序(可能是州名称的正则表达式)
我正在创建一个安全网站(使用 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
}
};
});
我知道这不是一个通用的解决方案,但我认为您可以调整它以适用于您的所有应用程序(可能是州名称的正则表达式)