Angularjs - 在注销之前提示用户有关未保存的更改

时间:2014-12-29 12:21:11

标签: angularjs

我在控制器中正在听$locationChangeStart。我正在做的是检查视图中是否有未保存的更改,并提示用户更改savediscard对话框。它很棒。但与此同时,在导航栏上我有一个Logout按钮,我在navbar控制器中绑定了一个click事件。它看起来像这样

function logout() {
    authService.logout();
    $location.path('/login');
}

上述authService.logout函数可以清除本地存储(访问令牌等)中保存的所有信息。然后我将用户导航到登录视图,但在导航$locationChangeStart之前,将引发具有一些未保存更改的控制器内部。因此,当我单击提示对话框上的保存更改时,它会抛出authorization错误,这是有道理的,因为只要我点击Logout按钮,所有授权标题就会清除。

我陷入困境,如何处理这两件事。有什么建议吗?

注意:只有2或3个视图,我需要提示用户有关未保存的更改。在其他情况下,它对我有用。

1 个答案:

答案 0 :(得分:0)

您需要重定向到登录视图,然后使用函数logout()。

在路线配置中:

$routeProvider.when('/login?action', {templateUrl: 'login.html', controller: loginController});

在登录控制器上读取routeParams:

if ($routeParams.action && $routeParams.action === 'logout') {
    logout();
}

如果您重定向到/ login?action = logout,您将看到“保存或放弃”对话框,然后注销。