我在控制器中正在听$locationChangeStart
。我正在做的是检查视图中是否有未保存的更改,并提示用户更改save
或discard
对话框。它很棒。但与此同时,在导航栏上我有一个Logout按钮,我在navbar
控制器中绑定了一个click事件。它看起来像这样
function logout() {
authService.logout();
$location.path('/login');
}
上述authService.logout
函数可以清除本地存储(访问令牌等)中保存的所有信息。然后我将用户导航到登录视图,但在导航$locationChangeStart
之前,将引发具有一些未保存更改的控制器内部。因此,当我单击提示对话框上的保存更改时,它会抛出authorization
错误,这是有道理的,因为只要我点击Logout
按钮,所有授权标题就会清除。
我陷入困境,如何处理这两件事。有什么建议吗?
注意:只有2或3个视图,我需要提示用户有关未保存的更改。在其他情况下,它对我有用。
答案 0 :(得分:0)
您需要重定向到登录视图,然后使用函数logout()。
在路线配置中:
$routeProvider.when('/login?action', {templateUrl: 'login.html', controller: loginController});
在登录控制器上读取routeParams:
if ($routeParams.action && $routeParams.action === 'logout') {
logout();
}
如果您重定向到/ login?action = logout,您将看到“保存或放弃”对话框,然后注销。